当使用DataOutputStream推送字符串时,我通常会执行以下操作:
DataOutputStream dout;
String str;
dout.write(str.getBytes());
我刚刚遇到了DataOutputStream
的writeBytes()
方法,我的问题是以上是否等同于:
dout.writeBytes(str);
如果不是,有什么区别,何时应该使用?
不,它不等同。
Javadocs for writeBytes
将字符串作为字节序列写出到基础输出流。字符串中的每个字符都通过丢弃其高八位按顺序写出。
因此,除了 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这样的低级协议。