Закрыть: это не совсем UTF-16, а что-то вроде UCS-2;но в любом случае он использует 2 байта для большинства символов (и последовательность из 2 символов, то есть 4 байта для некоторых редко используемых кодовых точек).
ObjectOutputStream использует то, что называется измененным UTF-8, что похоже на UTF-8но где нулевой символ выражается в виде 2-байтовой последовательности, что недопустимо в соответствии с UTF-8 (из-за ограничений кодирования уникальности), но этот тип естественным образом декодирует обратно до значения 0.
Но что вына самом деле спрашиваю: «Это работает так, что я пишу строку, читаю строку» - и отвечаю на это да.JDK выполняет правильное кодирование при записи байтов и декодирование при чтении.
Для чего стоит, вам лучше использовать метод writeUTF () для Strings, так как я думаю, что полученный результат немного более компактен.но "writeObject ()" также работает, просто нужно немного больше метаданных.