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。以上程序的打印结果为:
需要指出的是,这里所说的把byte类型转换为int类型,与赋值运算中的类型转换是两回事。在赋值运算中,把byte类型赋给int类型,取值不变,例如::
byte b1=15,b2=-1,b3=-9
int a1=b1,a2=b2,a3=b3; //a1 a2 a3 的取值分别为15, -1和-9
- 大小: 12.1 KB
分享到:
相关推荐
ByteArrayInputStream 是字节数组输入流。它继承于InputStream。 它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来...
总的来说,ByteArrayInputStream和ByteArrayOutputStream是Java中处理字节数组输入输出的便捷工具,它们在处理小规模数据、内存中操作以及测试场景下非常实用。理解并熟练掌握这两个类的用法,对于提升Java IO编程...
在Java编程中,我们经常会遇到需要将字节数组转换为输入流的情况,这时ByteArrayInputStream就派上了用场。它的构造函数接受一个byte数组作为参数,然后我们可以调用read()方法来逐个读取字节,或者使用read(byte[])...
// 创建对象输入流,从字节数组输入流中读取对象 ObjectInputStream in = new ObjectInputStream(byteIn); // 反序列化,得到新的对象 Object cloneObj = in.readObject(); return cloneObj; } catch ...
"TextProject"可能是一个关于GIF图像处理的项目,它涉及到对GIF图像的帧数解析、字节数组转换以及输入流操作。让我们深入探讨这些关键知识点。 1. **GIF帧数解析**: GIF文件结构中包含了多个图像描述块,每个块...
ByteArrayInputStream 是一种字节数组流,用于从字节数组中读取数据。 Java IO 流是 Java 语言中的一种基本输入/输出机制,提供了多种方式来处理输入/输出操作。它的分类、抽象类、基本方法和各种流类型都是 Java ...
Java中处理字节数组的方法多样,包括基本类型的转换、输入输出流的使用等。了解并熟练运用这些方法,对于处理二进制数据和优化性能至关重要。在实际开发中,根据需求选择合适的数据结构和方法,可以显著提高代码的...
1. `ByteArrayInputStream`: 这个类是从字节数组读取数据的输入流。当我们已经有一个字节数组,想要从中读取数据时,可以使用`ByteArrayInputStream`。例如,`ByteInp.java`可能包含一个实例,用于创建一个`...
在Java中,字节流分为两种类型:输入字节流(InputStream)和输出字节流(OutputStream)。它们分别用于读取和写入数据。字节流通常用于处理非文本文件,因为这些文件由一系列字节组成,而不是字符。 要实现字节流...
* read(字节数组):从输入流中读取数据到字节数组中 * a)中间容器 byte[] flush = new byte[长度] * b)接收长度 int len = 0 * c) 循环读取 while (-1 != (len = 流.read(flush))) * d)操作输出、拷贝 b) 输出...
在实际开发中,`PipedOutputStream`和`PipedInputStream`也可以用来实现输出流和输入流之间的连接,它们之间可以通过管道进行数据传输,但这种方式相对复杂,适用于更高级的同步和异步操作。 总结,将`OutputStream...
而ByteArrayInputStream则允许我们从一个字节数组中读取数据。 对于输出流,OutputStream类是所有字节输出流的基类,包含write(int)、close()和flush()方法,分别用于写入字节、关闭流和清空缓冲区。例如,...
- `ByteArrayInputStream(byte[] buf)`:使用指定的字节数组作为缓冲区。 - `ByteArrayInputStream(byte[] buf, int offset, int length)`:使用指定偏移量和长度的字节数组部分作为缓冲区。 2. **...
- **字节数组流**:ByteArrayInputStream和ByteArrayOutputStream用于在内存中操作字节数组。例如,可以通过ByteArrayOutputStream创建一个字节数组,然后通过ByteArrayInputStream读取该数组。 Java IO流体系结构...
数组流(ByteArrayInputStream, ByteArrayOutputStream)允许我们将字节数组视为流,方便数据的转换和存储。数据流(DataInputStream, DataOutputStream)则支持基本数据类型的读写,如int、float等,确保数据在网络...
- **ByteArrayInputStream** 和 **ByteArrayOutputStream**:用于在内存中操作字节数组。 - **BufferedInputStream** 和 **BufferedOutputStream**:增加了缓冲机制,提高了读写效率。 - **DataInputStream** 和 **...
- ByteArrayInputStream:从内存中的字节数组读取数据。 - BufferedInputStream:对输入流进行缓冲,提高读取效率。 **2. 输出流(OutputStream)** 输出流同样位于`java.io`包,它是所有写入数据的类的基类。它...