На самом деле он использует два байта для записи длины строки перед использованием алгоритма, который уплотняет ее в один, два или три байта на символ. (См. Документацию по java.io.DataOutput). Он близок к UTF-8, но, несмотря на то, что он задокументирован, существуют проблемы совместимости. Если вас не очень беспокоит объем данных, которые вы будете писать, вы можете легко написать свои собственные, сначала написав длину строки, а затем необработанные данные строки, используя метод getBytes.
// 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");