我正在使用以下 Java 代码将一个字节写入文件 fileoutput.txt
:
FileOutputStream fos=new FileOutputStream("C:/tests/fileoutput.txt");
BufferedOutputStream bos=new BufferedOutputStream(fos);
bos.write(153);
bos.flush();
为了检查文本文件中保存了哪些字节,我在十六进制编辑器中打开了它。在那里我看到程序按照预期写入了正确的字节 = 153。
但是后来我打开了 BufferedOutputStream 类中 write() 方法的源代码。此方法采用参数中的 int
并执行从 int
到 byte
的转换。
当java进行此操作时,我希望程序返回不同的字节,与原始字节不相似,因为在java中,字节类型的最大值为127。当我执行显式强制转换byte b =(int)153
b
字段变为等于 -103。
为什么 BufferedOutputStream
类中的 write()
方法的转换不同?
最佳答案
153和-103的二进制表示是相同的。因此,正确的十六进制值最终出现在文件中。
阅读二进制补码以获取更多信息:https://en.m.wikipedia.org/wiki/Two%27s_complement
关于java - 为什么 BufferedOutputStream 中的字节转换没有达到预期效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139437/