关于java字节流的一点笔记

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()方法:该方法从输入流中读取一个字节并返回值为0255的int型变量,而将任意一个byte型变量强制转换为int型变量时,执行符号扩展,得到的int型变量的值为-128127,可通过将该byte型变量和0xff进行与运算,这里0xff为int型的字面量,得到在0~255范围内的int型变量,此时应注意位运算符的优先级相对于算术运算符较低。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值