Java:IO流-流的操作规律和转换流

首先我们先来了解一些IO流基本知识。

一,基本知识概括

具体的IO流有很多种,针对不同的应用场景应该使用相应的流对象。但怎么确定应该使用哪个IO流对象呢?

一般要有四个明确:

1)明确源和目的

源:InputStream Reader

目的: OutputStream Writer

2)明确是否纯文本数据(Reader和Writer只能处理纯文本数据)

源:是:Reader

    否:InputStream

目的:是:Writer

      否:OutputStream

3)明确具体的设备

源:

a.硬盘 File

b.键盘 System.in

c.内存 数组容器

d.网络 Socket流

目的:

a.硬盘 File

b.控制台 System.out

c.内存 数组

d.网络 Socket流

4)是否需要额外功能

a.提高效率

加缓存区

b.需要转换

加上转换流

 

二,转换流

缓存技术我的上一篇文章有讲到过,那么什么是转换流?具体又什么作用呢?

我们知道System.in是一个一个字节进行接收,这样的操作效率很慢,为了加快操作速度可以将字节流转换成字符流,这样就可以按行操作。对应的类为:

InputStreamReader 字节流转化成字符流,此外该对象还可以指定特定的编码集

那么,我们的输出对象System.out也是按字节流进行输出,那么在输出的时候,就需要将读入的字符流转换成字节流再传给out进行输出。对应的类为;

OutputStreamWriter 字符流转换成字节流,此外该对象还可以指定特定的编码集

另外,在加上缓存技术,提高效率,具体的IO流输入和输出方向可以形象的用下图表示:

 

三,应用示例

需求描述:

              * 获取用户的键盘输入

              * 将数据变成大写显示在控制台上

              * 如果用户输入的是over,结束键盘输入

private static void readEff() throws IOException {
        /*InputStream in = System.in;
        InputStreamReader inr = new InputStreamReader(in);//将字节流转换成字符流
        BufferedReader br = new BufferedReader(inr);//加入缓存技术,提高读取效率
        OutputStream out = System.out; 
        OutputStreamWriter ow = new OutputStreamWriter(out);//将字符流转换成字节流
        BufferedWriter bw = new BufferedWriter(ow);//加入缓存技术,提高输出效率*/
        //更简洁的写法
        /*
         * 另外可以根据输入输出的源头,替换相应的输入输出对象
         * 需求1,将键盘输入写入到文本文件中
         * 需求2,将文件中的数据输出到控制台
         */
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//需求2,System.out=>new FileInputStream("xx.txt")
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//需求1.System.out=>new FileOutputStream("xx.txt")
        
        
        String line = null;
        while((line=br.readLine())!=null) {
            
            if("over".equals(line))
                break;
                
            bw.write(line.toUpperCase());
            bw.newLine();
            bw.flush();
            
        }
        
    }

 

最后,美景来一张,Life is beautiful!

 

 

posted @ 2019-04-21 12:57  小孟同学  阅读(398)  评论(0编辑  收藏  举报