目录
内存流
ByteArrayInputStream与ByteArrayOutputStream
用于操作字节数组的流对象。
CharArrayReader与CharArrayWriter
用于操作字符数组的流对象。
StringReader与StringWriter
用于操作字符串的流对象。
以上都是内存为源和目的的读写操作流对象,简称内存流,它们的构造函数和常用方法使用大致类似,以下以操作字节数组的流对象:ByteArrayInputStream与ByteArrayOutputStream展开来讲。
扩展:
内存流的作用:
1、用于操作字节数组的流对象,其实它们就是对应设备为内存的流对象。
2、该流的关闭是无效的,因为没有调用过系统资源。
3、按照流的读写思想操作数组中元素。
构造函数说明
ByteArrayInputStream:在构造的时候,需要接收数据源,而且数据源是一个字节数组。
ByteArrayOutputStream:在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组,它就是数据目的地。
注意:因为这两个流对象都操作的数组,并没有使用系统资源,所以不用使用close()关闭系统资源。
常用方法
ByteArrayInputStream(byte[] buf):创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
ByteArrayOutputStream():创建一个新的 byte 数组输出流。
void writeTo(OutputStream out):将此 byte 数组输出流的全部内容写入到指定的输出流参数中,这与使用 out.write(buf, 0, count) 调用该输出流的 write 方法效果一样。
流操作规律设备详解
源设备:
键盘 System.in, 硬盘 FileStream, 内存 ArrayStream…(内存流)
目的设备:
控制台 System.out, 硬盘 FileStream, 内存 ArrayStream…(内存流)
示例
内存流本质:用流的读写思想来操作数组。
import java.io.*;
class ByteArrayStream{
public static void main(String[] args)throws IOException{
// 数据源
ByteArrayInputStream bis=new ByteArrayInputStream("ABCDEFG".getBytes());
// 数据目的
ByteArrayOutputStream bos=new ByteArrayOutputStream();
int by=0;
while((by=bis.read())!=-1){
bos.write(by);
}
System.out.println(bos.size());
System.out.println(bos.toString());
// bos.writeTo(new FileOutputStream("a.txt")); // 只有这个方法会抛出读写异常
}
}