java字节数组输入流ByteArrayInputStream类介绍

下面要给大家介绍的是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基础内容,可以为你分享哦,希望上面的内容可以对你有所帮助。

推荐阅读:

java字节数组输出流ByteArrayOutputStream类介绍

java字节流,字节输入流,InputStream介绍

java字节流,字节输出流,OutputStream介绍