Java_基础—内存输出流

package com.soar.otherio;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Demo2_ByteArrayOutputStream {
    /*
****1.什么是内存输出流
    * 该输出流可以向内存中写数据, 把内存当作一个缓冲区, 写出之后可以一次性获取出所有数据
****2.使用方式
    * 创建对象: new ByteArrayOutputStream()
    * 写出数据: write(int), write(byte[])
    * 获取数据: toByteArray()
     * 
     * ByteArrayOutputStream()
     * 内存输出流
     * 
     * FileInputStream读取中文的时候出现了乱码
     * 解决方案:
     * ① 字符流读取
     * ② ByteOutPutStream
     */
    public static void main(String[] args) throws IOException {
        //demo1();
        FileInputStream fis = new FileInputStream("e.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());    //将缓冲区的内容转换为了字符串,在输出语句中可以省略调用toStrin()方法
        fis.close();
    }

    private static void demo1() throws FileNotFoundException, IOException {
        FileInputStream fis = new FileInputStream("e.txt");
        byte[] arr = new byte[3];
        int len;
        while((len = fis.read(arr)) != -1){
            System.out.println(new String(arr, 0, len));
        }
    }

}

面试题

package com.sora.test;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class Test8 {
    /*
     * 定义一个文件输入流,调用read(byte[] b)方法,
     * 将a.txt文件中的内容打印出来(byte数组大小限制为5)
     * 
     * 分析:
     * ① read(byte[] b)是字节输入流的方法,创建FileInputStream,关联a.txt
     * ② 创建内存输出流,将读到的数据写到内存输出流中
     * ③ 创建字节数组,长度为5
     * ④ 将内存输出流的数据,全部转换为字符串打印
     * ⑤ 关闭输入流
     */
    public static void main(String[] args) throws IOException {
        //① read(byte[] b)是字节输入流的方法,创建FileInputStream,关联a.txt
        FileInputStream fis = new FileInputStream("a.txt");
        //② 创建内存输出流,将读到的数据写到内存输出流中
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        //③ 创建字节数组,长度为5
        byte[] arr = new byte[5];
        int len;

        while((len = fis.read(arr)) != -1){
            baos.write(arr, 0, len);
        }
        //④ 将内存输出流的数据,全部转换为字符串打印
        System.out.println(baos);       //即使没有调用,底层也会默认帮我们调用toString()方法
        //⑤ 关闭输入流
        fis.close();
    }

}
posted @ 2017-07-27 09:49  Soar_Sir  阅读(170)  评论(0编辑  收藏  举报