Есть две вещи, которые я хочу, чтобы люди узнали из этого вопроса: Сериализация Java медленная - живите с этим. Микробенчмарки хуже, чем неудачи.
Микробенчмарки, как правило, вводят в заблуждение. Есть некоторые вещи, которые стоит сделать в качестве общей идиомы (например, поднятие strlen из цикла в C). Оптимизаторы имеют привычку ломать микробенчмарки. Возьмите ваше приложение и профилируйте его под реальной нагрузкой. Если фрагмент кода вызывает замедление работы вашей программы, не пытайтесь оптимизировать его. Микробенчмарки не помогут вам найти эти места.
writeObject и writeUTF не делают одно и то же. writeObject указывает, какой тип объекта он собирается написать. Также writeObject просто записывает обратную ссылку, если тот же объект (строка) был записан с момента последнего сброса. writeUnshared ближе к записи UTF.
Так что, если вы продолжите писать точно такой же длинный, String writeObject должен победить, потому что ему просто нужно написать обратную ссылку. Уменьшение сериализованного размера может уменьшить пропускную способность файла / сети или просто память, что может привести к более значительному повышению производительности. Для коротких строк просто выписать данные будет быстрее. writeUnshared должен почти обеспечивать производительность writeUTF, но сохраняя общность.
Обратите внимание, что во всех случаях данные записываются как UTF-8, а не UTF-16. Если вы хотите UTF-16 String.toCharArray
или аналогичный, подойдет.