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

时间:2019-05-31 07:36:11

标签: java dataoutputstream

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

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

我刚刚碰到了writeBytes()的{​​{1}}方法,我的问题是上述内容是否等同于:

DataOutputStream

如果没有,区别是什么?何时使用?

1 个答案:

答案 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这样的低级协议。