有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java BufferedWriter使用MSB 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文件>;出去

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


共 (3) 个答案

  1. # 1 楼答案

    BufferedWriter是一个面向字符的流,因此您写入的字节会被编码为您在文件中看到的不同内容。使用BufferedOutputStream来处理这种类型的二进制数据

  2. # 2 楼答案

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

  3. # 3 楼答案

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

    欲了解更多信息,请访问the link