It actually uses two bytes to write the length of a string before using an algorithm that betrays it in one, two, or three bytes per character. (See java.io.DataOutput Documentation). It is close to UTF-8, but despite being documented, there are compatibility issues. If you are not really worried about the amount of data you will write, you can easily write your own by writing the length of the string first and then the raw data of the string using the getBytes method.
// Write data String str="foo"; byte[] data=str.getBytes("UTF-8"); out.writeInt(data.length); out.write(data); // Read data int length=in.readInt(); byte[] data=new byte[length]; in.readFully(data); String str=new String(data,"UTF-8");
kasperjj
source share