字节字符转化流——InputStreamReader和OutputStreamWriter

蓝咒 提交于 2020-01-24 02:53:23

字符流——Write和Reader中,最后我们发现其实字符流最终还是转化为字节流,进行对文件的操作的,它借助的就是InputStreamReader和OutputStreamWriter。


InputStreamRead和OutputStreamWriter又称转化流,可以将一个字节流转换为字符流,也可以将一个字符流转换为字节流。


InputStreamReader:可以将输入的字节流转换为转换为字符流的输入形式
OuputSteamWriter:可以将输入的字符流转换为字节流的输出形式


其实上述两种情况说出来比较不好理解,其实这是站在流的方向上进行描述的,接来下我们以例子为例,先来看一看InputStreamReader

public class ChangeStreamDemo {
    public static void main(String[] args) {
        try {
            InputStream is = new FileInputStream(new File("F:/demo/test.txt"));
            read(is);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    private static void read(InputStream is){
        Reader reader = new InputStreamReader(is, Charset.forName("UTF-8"));
        
        StringBuilder sb = new StringBuilder();
        char[] chars = new char[1024];

        int len = -1;
        try {
            while ((len = reader.read(chars)) != -1){
                sb.append(new String(chars, 0, len));
            }
            reader.close();
            System.out.println(sb.toString());;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

InputStreamReader将输入的字节流转换为转换为字符流的输入形式,就是上述代码的意思,即我们读取文件时是以字节流的形式,但是真正操作时,我们是将其转换为字符流的形式输入内存之中的。
在这里插入图片描述




然后我们再来看一下OutputStreamWriter,如下:

public class ChangeStreamDemo {
    public static void main(String[] args) {
        try {
            OutputStream os = new FileOutputStream(new File("F:/demo/test.txt"));
            write(os);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    private static void write(OutputStream os){
        try {
            Writer writer = new OutputStreamWriter(os, Charset.defaultCharset());
            writer.write("你好,世界");
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

OuputSteamWriter是将输入的字符流转换为字节流的输出形式,就是我们在写入文件时操作的是字符流,但是真正写入程序的使用的是字节流。
在这里插入图片描述


其实从代码的角度来说,都是把字节流转化为字符流来进行操作的

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!