1
writer = new BufferedWriter(new OutputStreamWriter(System.out));
char[] test = new char[1];
test[0]=(char)128;
writer.write(test,0,1);
writer.flush();

使用此命令调用;java文件>输出

然后用十六进制编辑器检查“输出”,我希望在文件开头得到字节 0x80,后面什么都没有。相反,我得到 0x3F。通过使用不同的代码(即 64)执行相同的代码,我得到了预期的十六进制 0x40。

4

3 回答 3

0

BufferedWriter是一个面向字符的流,所以你写的字节被编码成你在文件中看到的不同的东西。使用BufferedOutputStream旨在处理此类二进制数据的 a。

于 2013-04-19T05:22:07.447 回答
0

在这种情况下,OutputStreamWriter 使用平台的默认字符编码将字符转换为字节。如果您想在文件中看到 0x80 (128),请使用new OutputStreamWriter(System.out, "ISO-8859-1");

于 2013-04-19T05:27:52.677 回答
0

根据 BufferedWriter 的 Java 6 API,它说:“如果没有缓冲,每次调用 print() 方法都会导致字符转换为字节,然后立即写入文件,这可能非常低效。”

有关相同的更多信息,您可以访问链接

于 2013-04-19T05:28:38.007 回答