首页 > 解决方案 > 为什么 BufferedOutputStream 中的字节转换按预期工作?

问题描述

我正在fileoutput.txt使用 Java 中的以下代码向文件写入一个字节:

FileOutputStream fos=new FileOutputStream("C:/tests/fileoutput.txt");
BufferedOutputStream bos=new BufferedOutputStream(fos);

bos.write(153);
bos.flush();

为了检查文本文件中保存了哪些字节,我在十六进制编辑器中打开了它。在那里,我看到程序按预期写入了正确的字节 = 153。

但后来我在 BufferedOutputStream 类中打开了 write() 方法的源代码。此方法接受intin 参数并执行从intto的转换byte

当 java 进行此操作时,我希望程序返回不同的字节,与原始字节不同,因为在 java 中,字节类型的最大值为 127。当我执行显式转换时,byte b=(int)153b字段变为等于 -103。

为什么类中的write()方法BufferedOutputStream会以不同的方式进行强制转换?

标签: java

解决方案


153和-103的二进制表示是一样的。因此,正确的十六进制值最终会出现在文件中。

阅读二进制补码以获取更多信息:https ://en.m.wikipedia.org/wiki/Two%27s_complement


推荐阅读