该输出流可以向内存中写数据,把内存当做一个缓冲区,写出之后一次性获取所有数据。
FileInputStream fis = new FileInputStream("a.txt");
ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 在内存中创建了可以增长的字符数组
int b;
while((b = fis.read()) != -1)
baos.write(b); // 将数据逐个写到内存中
byte[] arr = baos.toByteArray(); // 将缓冲区中的数据全部获取出来,并赋值给arr
System.out.println(new String(arr)); // 可以使用指定编码表,即在构造方法中传入码表
System.out.println(baos.toString()); // 使用默认的编码表转换,输出时toString()方法可以省略
fis.close();
第9行和第11行的输出效果一样。
注意ByteArrayOutputStream不需要关流。因为ByteArrayOutputStream是内存读写流,不同于指向硬盘的流,它内部是使用字节数组读内存的,这个字节数组是它的成员变量,当这个数组不再使用变成垃圾的时候,Java的垃圾回收机制会将它回收。