Writes every character in the string s, to the output stream, in order, two bytes per character. If s is null, a NullPointerException is thrown. If s.length is zero, then no characters are written. Otherwise, the character s[0] is written first, then s[1], and so on; the last character written is s[s.length-1]. For each character, two bytes are actually written, high-order byte first, in exactly the manner of the writeChar method.
http://java.sun.com/j2se/1.4.2/docs/api/java/io/DataOutput.html#writeChars%28java.lang.String%29
see, when you call writeChars(str) it will also write one by one! neither you can read all chars at once nor read!
hope its clear to you?