伙伴和我正在做一项涉及将字节写入文件的作业。通常我们会使用类似FileOutputStream
的东西,但是这个赋值明确地要求我们将数据(在本例中是以字节为单位)写出来标准输出。不幸的是,它没有按预期工作。
例如,编写此代码:
System.out.write(144); // write the byte 0x90, which is 144 as an int
System.out.flush();
...实际上写入标准输出对应于63的字节为整数,而不是144。
在使用FileOutputStream时,我们似乎没有遇到过这个问题,但正如我之前所说,该任务要求我们写入标准输出。有什么想法吗?
提前致谢。
答案 0 :(得分:0)
当我在Eclipse控制台中看到字符0x3F(63)而不是0x90时,我也感到很惊讶。正如Miguel Prz所建议的那样,问题与控制台编码有关。
默认情况下,它在cp1252上设置,似乎将0x90转换为0x3F。您可以做的最好的事情是设置ISO-8859-1并重定向到文件(见截图)
控制台也尝试显示字符,但是当我复制粘贴到Hex编辑器时,我得不到正确的结果。
但是,在这种特定情况下,我建议从Windows或Linux控制台启动程序并将输出重定向到文件。因此,您可以避免任何编码转换,并将二进制数据直接写入文件。 ISO-8859-1适用于0x90但可能会出现其他字符问题。此外,在标准输出(Eclipse控制台或其他)中显示所有字节(0x00至0xFF)毫无意义。