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();
- }
- }
以上字节数组输入流从字节数组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。以上程序的打印结果为:
需要指出的是,这里所说的把byte类型转换为int类型,与赋值运算中的类型转换是两回事。在赋值运算中,把byte类型赋给int类型,取值不变,例如::
- byte b1=15,b2=-1,b3=-9
- int a1=b1,a2=b2,a3=b3;
分享到:
相关推荐
ByteArrayInputStream 是字节数组输入流。它继承于InputStream。 它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来...
ByteArrayInputStream和ByteArrayOutputStream分别集成自InputStream和OutputStream这两个输入和输出流,这里我们就来详解Java中ByteArray字节数组的输入输出流的用法,需要的朋友可以参考下
它和ByteArrayInputStream类似,只不过ByteArrayInputStream是字节数组输入流,而CharArray是字符数组输入流。CharArrayReader 是用于读取字符数组,它继承于Reader。操作的数据是以字符为单位!
CharArrayReader 是字符数组输入流。它和ByteArrayInputStream类似,只不过ByteArrayInputStream是字节数组输入流,而CharArray是字符数组输入流。CharArrayReader 是用于读取字符数组,它继承于Reader
|--ByteArrayInputStream/:字节数组输入流。操作的都是内存中的数组,所以不需要关闭。把数组封装到流中,可以提供更多的方法操作数组。 | |--SequenceInputStream/:序列流。将多个读取流合并成一个读取流,可以...
a) 字符b)字节c)字节数组D)对象 4. 下列流中哪一个使用了缓冲区技术A A.BuffereOutputStream B. FileInputStream C. DataOutputStream D.FileReader 5.下列字节输入流中,哪一个不能够被实例化B A....
4)SequenceInputStream:这个类可以将几个输入流串联在一起合并为一个输入流,构造函数有: SequenceInputStream(Enumeration e)枚举类型e中包含了若干个要被串联的输入流 SequenceInputStream(InputStream s1, ...
PushbackInputStream PushbackInputStream 为另一个输入流添加性能,即“推回 (push back)”或“取消读取 (unread)”一个字节的能力。 PushbackReader 允许将字符推回到流的字符流 reader。 RandomAccessFile 此类...
SequenceInputStream 可以认为是一个工具类,将两个或者多个输入流当成一个输入流依次读取。完全可以从IO 包中去除,还完全不影响IO 包的结构,却让其更“纯洁”――纯洁的Decorator 模式。 PrintStream 也可以认为...
think in java 源码 ThinkingInJava Thinking In Java Source Code 1、文件过滤器 实现FilenameFilter接口来对...ByteArrayInputStream(字节数组,字节数组即代表内存缓冲区,允许将内存缓冲区当作inputstream使用) S