Java write(str.getBytes()) vs writeBytes(str)



当使用DataOutputStream推送字符串时,我通常会执行以下操作:

DataOutputStream dout;
String str;
dout.write(str.getBytes());

我刚刚遇到了DataOutputStreamwriteBytes()方法,我的问题是以上是否等同于:

dout.writeBytes(str);

如果不是,有什么区别,何时应该使用?

不,它不等同。

Javadocs for writeBytes

say

将字符串作为字节序列写出到基础输出流。字符串中的每个字符都通过丢弃其高八位按顺序写出。

因此,除了 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这样的低级协议。

最新更新