字节数组输入流 ByteArrayInputStream

ByteArrayInputSteam类从内存中的字节数组中读取数据,因此它的数据源是一个字节数组。这个类的构造方法包括:
ByteArrayInputStream(byte[] buf)--------参数buf指定字节数组类型的数据源。
ByteArrayInputStream(byte[] buf, int offset, int lenght)-----参数buf指定字节数组类型数据源,参数offset指定从数组中开始读取数据的起始下标位置,lenght指定从数组中读取的字节数。
ByteArrayInputStream类本身采用了适配器设计模式,它把字节数组类型转换为输入流类型,使得程序能够对字节数组进行读操作。
下面这个ByteArrayTester类演示了 ByteArrayInputStream的用法。
package xiaohang.com;

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class ByteArrayTester {
public static void main(String[] args) throws IOException {
byte[] buff = new byte[] { 2, 15, 67, -1, -9, 9 };
ByteArrayInputStream in = new ByteArrayInputStream(buff, 1, 4);
int data = in.read();
while (data != -1) {
System.out.println(data + " ");
data = in.read();
}
in.close();// ByteArrayInputSystem 的close()方法实际上不执行任何操作
}
}


以上字节数组输入流从字节数组buff的下标为1的元素开始读,一共读取4个元素。对于读到的每一个字节类型的元素,都会转换为int类型。
例如:对于字节类型的15,二进制形式为00001111,转换为int类型的二进制形式为
00000000 00000000 00000000 00001111,因此字节类型的15 转换为int类型仍然是15;对于字节类型的-1,二进制形式为 11111111,转换为int类型的二进制形式为
00000000 00000000 00000000 11111111 ,因此字节类型的-1 转换为int类型是255;对于字节类型的-9,二进制形式为 11110111, 转换为int类型的二进制形式为 00000000 00000000 00000000 11110111, 因此字节类型的-9转换为 int类型是 247。

以上字节数组输入流在读取了4个字节后,就达到了输入流的末尾,在执行read()方法,就会返回-1。以上程序的打印结果为:

[img]http://dl.iteye.com/upload/attachment/361018/ab8e25a7-dd81-3c41-bf07-254960b73039.jpg[/img]

需要指出的是,这里所说的把byte类型转换为int类型,与赋值运算中的类型转换是两回事。在赋值运算中,把byte类型赋给int类型,取值不变,例如::

byte b1=15,b2=-1,b3=-9
int a1=b1,a2=b2,a3=b3; //a1 a2 a3 的取值分别为15, -1和-9
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值