使用DataOutputStream推送字符串时,我通常执行以下操作:
DataOutputStream dout;
String str;
dout.write(str.getBytes());
我刚刚碰到了writeBytes()
的{{1}}方法,我的问题是上述内容是否等同于:
DataOutputStream
如果没有,区别是什么?何时使用?
答案 0 :(得分:1)
不,它不是等效的。
writeBytes
的Javadocs说
将字符串作为字节序列写到基础输出流中。字符串中的每个字符通过丢弃高八位来依次写出。
因此,除了ASCII字符串之外,这将无法正常工作。
你应该做的
dout.write(str.getBytes(characterSet));
// remember to specify the character set, otherwise it become
// platform-dependent and the result non-portable
或
dout.writeChars(str);
或
dout.writeUTF(str);
请注意,只有最后一个方法也写入String的长度,因此对于其他方法,如果打算稍后再读回它,则可能需要确切地知道自己在做什么。
更大的问题是,为什么您需要直接使用诸如DataOutputStream这样的低级协议。