(1)
程序进行读入、读出时,数据的来源(去处)并不一定是文件,也有可能是内存上的一块空间如一个数组,ByteArrayInputStream、ByteArrayOutputStream可以解决此类问题,且从其构造函数上可以看出,此两种类型只适用于解决内存上数据的读入、读出,不能用于文件。
ByteArrayInputStream和其他读入流并无太大差异,只不过其读取对象有文件变为数组, ByteArrayOutputStream则有些不同,bos可以将读取的内容存在自身中,也就是说bos可以像一个数组或容器 一样存储内容。
byte t[] = {1,2,3};
byte m[] = new byte[3];
ByteArrayInputStream bis = new ByteArrayInputStream(t);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int b = bis.read();
while(b!=-1){
bos.write(b);
b = bis.read();
}
System.out.println(bos.size());
bos也可通过toByteArray()方法转为byte数组。
(2) 根据数据来源的不同(来自文件或来自内存),java IO中分出了两部分对象对此进行处理,以FileInputStream(FileOutputStream)为代表的一类,此类别没有相应的方法对内存中的各种基础类型进行读写;和以DataInputStream(DataOutputStream)为代表的一类,此类别没有相应的方法对文件中的数据进行读写,
但在某些特殊情况下,需要将这两部分对象的方法进行融合才能达到要求,因此,java IO 设计了一种过滤机制,即通过构造方法将不同的类层层嵌套用来达到目的。