FileOutputStream 中的 write() 方法采用 int 但截断前 3 个字节并将字节写入流。如果文件包含 ASCII 值大于 127 的字符,并且从中读取字节然后写入输出流(另一个文本文件),它将如何显示它,因为在 Java 中字节的最大值可以为 +127。
如果一个文本文件(input.text)有字符“›”,其 ASCII 值为 155。输入流 input 从中读取:
int in= new FileInputStream("input.txt").read();//in = 155
现在它写入另一个文本文件(output.txt)
new FileOutputStream("output.txt").write(in);
这里整数“in”被截断为具有相应十进制值的字节:-101。即使有关字符的信息似乎已丢失,它如何成功地将字符写入文件?
刚才我浏览了 java 文档中 write(int) 方法的描述,我观察到的是
写入的一般约定是将一个字节写入输出流。要写入的字节是参数 b 的 8 个低位。b 的高 24 位被忽略。
所以我相信与我之前的想法相反(write() 中的 int 被截断,因为在将整数向下转换为大于 127 的值时会发生这种情况),仅忽略 24 个高位,仅考虑 8 个最低有效位. 不会发生截断和转换为字节。我想我是对的。