下面要给大家介绍的是java字节数组输入流方面的知识,主要涉及了ByteArrayInputStream类的两种构造方法重载形式,一起来了解一下吧。
ByteArrayInputStream类可以从内存的字节数组中读取数据,这个类有下面的两种构造方法重载形式。
ByteArrayInputStream(byte[] buf):创建一个字节数组输入流,字节数组类型的数据源由参数buf指定;ByteArrayInputStream(byte[] buf,int offse,int length):创建一个字节数组输入流,其中,参数buf指定字节数组类型的数据源,offset 指定在数组中开始读取数据的起始下标位置,length指定读取的元素个数。
示例:
使用ByteArrayInputStream类编写一个案例,实现从一个字节数组中读取数据,再转换成int型进行输出。
代码:
public class test08 { public static void main(String[] args) { byte[] b = new byte[] { 1 , -1 , 25 , -22 , -5 , 23 }; // 创建数组 ByteArrayInputStream bais = new ByteArrayInputStream(b, 0, 6); // 创建字节数组输入流 int i = bais.read(); // 从输入流中读取下一个字节,并转换成int型数据 while (i != -1) { // 如果不返回-1,则表示没有到输入流的末尾 System.out.println("原值=" + (byte) i + "\t\t\t转换为int类型=" + i); i = bais.read(); // 读取下一个 } } }
在这个示例当中,字节输入流bais从字节数组b的第一个元素开始读取4字节元素,并且,将这4字节转换为int类型数据,最后返回。
注意:上面的示例当中,除了打印i的值之外,还打印出了(byte)i的值,因为,i的值是从byte类型的数据转换过来的,所以,使用(byte)i可以获取原来的byte数据。
程序运行结果:
原值=1 转换为int类型=1 原值=-1 转换为int类型=255 原值=25 转换为int类型=25 原值=-22 转换为int类型=234 原值=-5 转换为int类型=251 原值=23 转换为int类型=23
从上面的运行结果可以看出,字节类型的数据-1和-22转换成int类型的数据后变成了255和234。
解释:
字节类型的1,二进制形式为00000001,转换为int类型后的二进制形式为00000000 00000000 0000000000000001,对应的十进制数为1。
字节类型的-1,二进制形式为11111111,转换为int类型后的二进制形式为00000000 00000000 0000000011111111,对应的十进制数为255。
可以看出,从字节类型的数转换成int类型的数的时候,假如,是正数,那么,数值不变;假如,是负数,那么,由于转换后,二进制形式前面直接补了24个0,这样就改变了原来表示负数的二进制补码形式,所以数值发生了变化,也就变成了正数。
注意:负数的二进制形式以补码形式存在。
例: -1,其二进制形式是这样得来的:首先获取1的原码00000001,之后,进行反码操作,1变成0,0变成1,这样就得到11111110,最后进行补码操作,就是在反码的末尾位加1,这样就变成了11111111。
请继续关注奇Q工具网吧,有更多的java基础内容,可以为你分享哦,希望上面的内容可以对你有所帮助。
推荐阅读: