字节数组流包括字节数组输入流(ByteArrayInputStream)和字节数组输出流(ByteArrayOutputStream),它们分别使用字节数组作为流的源和目标。ByteArrayInputStream和ByteArrayOutputStream分别是InputStream和OutputStream的子类,InputStream和OutputStream都是抽象类。(Java中流的概念)
字节数组输入流:ByteArrayInputStream类是InputStream类的子类,它允许从字节数据中读取数据。ByteArrayInputStream类的构造方法定义如下
构造方法 | 含义 |
ByteArrayInputStream(byte[] buf) | 使用给定的数组buf创建一个数组字节输入流对象。 |
ByteArrayInputStream(byte[] buf, int offset, int length) | 使用给定的字节数组buf、起始偏移量offset和长度length创建一个数组字节输入流对象。 |
字节数组输出流:ByteArrayOutputStream类是OutputStream类的子类,它允许向字节数组中写入数据。ByteArrayOutputStream类的构造方法定义如下:
构造方法 | 含义 |
ByteArrayOutputStream() | 创建一个数组字节输出流对象,其缓冲区的大小为默认的32个字节。 |
ByteArrayOutputStream(int size) | 创建一个数组字节输出流对象,其缓冲区的大小由参数size指定。 |
ByteArrayOutputStream对象中的数据被写入一个byte数组中,其缓冲区会随着数据的不断写入而自动地增长,可以使用toByteAarray()和toString()方法获取数据。
【例1】字节数组输入/输出流的使用
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class ByteArrayDemo {
public static void main(String[] args) {
ByteArrayOutputStream baos; //字节数组输出流
ByteArrayInputStream bais; //字节数组输入流
byte[] content="computer".getBytes();//将字符串转换为字节数组
try {
baos=new ByteArrayOutputStream();//创建字节数组输出流
baos.write(content);//将字节数组中的内容写入字节数组输出流
byte[] buf=baos.toByteArray();//获取字节数组输出流中的数据
System.out.print("写入的内容为:");
for(int i=0;i<buf.length;i++) {
System.out.print((char)buf[i]);
}
System.out.println();
bais=new ByteArrayInputStream(buf);//创建字节输入流
int c=0;
System.out.print("读取的内容为:");
while((c=bais.read())!=-1) {
System.out.print((char)c);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行上面的程序,在控制台中输出的内容如下:
写入的内容为:computer
读取的内容为:computer