关于java字节流的一点笔记

时间:2022-08-14 02:15:23

1.OutputStream.write(int)方法:该方法虽然面向的是字节流,但接受的却是一个int型变量,以下为部分源代码


public synchronized void write(int b) throws IOException {
if (count >= buf.length) {
flushBuffer();
}
buf[count++] = (byte)b;
}

可知该方法将int类型的变量转型为byte类型的变量并写入文件,java中byte占一个字节由8位二进制数表示,当传递的int型参数超过这个表示范围时,会是怎样的结果呢?

作如下测试:

public static void main(String[] args) throws IOException{
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("E://data.txt"));
bos.write(353);
bos.write(97);
bos.write(-159);
bos.write(333);
bos.write(77);
bos.write(-179);
bos.close();//注意关闭流之前,文件中并无内容
}

文件中的输出结果为:aaaMMM(a与M的ASCII码分别为97、77)。说明当传递的int型参数为a时,实际上写入文件的数据为a%256,即0x0~0xff。

2.InputStream.read()方法:该方法从输入流中读取一个字节并返回值为0~255的int型变量,而将任意一个byte型变量强制转换为int型变量时,得到的int型变量的值为-128~127,可通过将该byte型变量和0xff进行与运算得到在0~255范围内的int型变量,此时应注意位运算符的优先级相对于算术运算符较低。