Loading

IO流之ByteArrayOutputStream

该输出流可以向内存中写数据,把内存当做一个缓冲区,写出之后一次性获取所有数据。

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的垃圾回收机制会将它回收。

posted @ 2017-02-25 10:10  leon_x  阅读(47)  评论(0)    收藏  举报