java - 为什么 BufferedOutputStream 中的字节转换没有达到预期效果?

标签 java

我正在使用以下 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 并执行从 intbyte 的转换。

当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/

相关文章:

java - 如何使用 Spring 配置 UCanAccess JDBC 驱动程序?

java - 用于 CSV 上传的 Struts2 + Tomcat MIME 类型

java - 如何更改 JTextField 的宽度和高度?

java - Backbone marionette 列出来自服务器的值

java - 如何在 Kitkat Android 中将图像从一个 Activity 发送到另一个 Activity ?

java - HttpSessionListener 未检测到 session 超时

java - 在另一个类方法中调用小程序

java - 如何用 Java 构建一个互联网下载管理器?

java - 如何读取文件并返回字符串及其值

java - 如何删除连续位置的所有重复项?