Java写入(str.getBytes())与写入字节(str)

Java写入(str.getBytes())与写入字节(str),java,dataoutputstream,Java,Dataoutputstream,使用DataOutputStream推送字符串时,我通常会执行以下操作: DataOutputStream dout; String str; dout.write(str.getBytes()); 我刚刚遇到了DataOutputStream的writeBytes()方法,我的问题是上述方法是否等同于: dout.writeBytes(str); 如果没有,区别是什么?什么时候应该使用?没有,它不是等效的 用于writeBytes的Javadocs 将字符串作为字节序列写入基础输出流。字符

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

DataOutputStream dout;
String str;
dout.write(str.getBytes());
我刚刚遇到了
DataOutputStream
writeBytes()
方法,我的问题是上述方法是否等同于:

dout.writeBytes(str);

如果没有,区别是什么?什么时候应该使用?

没有,它不是等效的

用于
writeBytes
的Javadocs

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

因此,除了ASCII字符串之外,这不会很好地工作

你应该做什么

dout.write(str.getBytes(characterSet));
// remember to specify the character set, otherwise it become 
// platform-dependent and the result non-portable

请注意,只有最后一个方法也会写入字符串的长度,因此对于其他方法,如果您打算稍后将其读回,则可能需要确切地知道您正在执行的操作


更大的问题是为什么需要直接使用DataOutputStream这样的低级协议

dout.writeChars(str);
dout.writeUTF(str);