What is UTF that Serialization uses to write strings?
The Java programming language was designed from the ground up to be compatible with multiple character sets from multiple languages. This entails using a non-ASCII character and string representation within the language itself.
Internally, Java stores and manipulates all characters and strings as Unicode. Externally, in serialization and in bytecode, Java uses the UTF-8 encoding of the Unicode character set. For each character, UTF-8 encoding is a 1-, 2-, or 3-byte representation of the corresponding 2-byte Unicode character (ASCII characters are encoded as 1 byte, non-ASCII characters are encoded as 2 or 3 bytes).
For more information, refer to the FAQ What is Unicode?