当前位置: 首页 > 图灵资讯 > 技术篇> 节点流和处理流一

节点流和处理流一

来源:图灵教育
时间:2023-05-22 09:23:40

1.基本介绍621

1.节点流可以从特定的数据源读写数据,如Filereader、FileWriter[源码]

节点流和处理流一_java

2.处理流(又称包装流)是在现有流(节点流或处理流)上“连接”,为程序提供更强大的读写功能,更灵活,如bufferedreader、BufferedWriter[源码]

节点流和处理流一_抽象类_02

2.节点流和处理流的列表621

节点流和处理流一_处理流_03

3.节点流与处理流的区别与联系622

1.节点流是直接与数据源连接的底层流/低级流。

2.处理流(包装流)包装节点流不仅可以消除不同节点流的差异,还可以提供更方便的方法来完成输入和输出。[源代码理解]

3.处理流(也称为包装流)包装节点流,使用装饰设计模式,不会直接连接到数据源[模拟装饰设计模式=”合作伙伴会非常清楚.]

3.1com模拟处理流代码.stulzl.reader_.在包中测试Test__
package com.stulzl.reader_;///模拟处理流/包装流  622public class Test_ {    public static void main(String[] args) {        BufferedReader_ bufferedReader_ = new BufferedReader_(new FileReader_());        bufferedReader_.readFiles(10);                bufferedReader_.readFile();        ///希望这次通过 BufferedReader_ 多次读取字符串        BufferedReader_ bufferedReader_1 = new BufferedReader_(new StringReader_());        bufferedReader_1.readStrings(5);    }}
抽象父类Reader_
package com.stulzl.reader_;public abstract class Reader_ {//抽象类    //定义两种方法    public void readFile() {};    public void readString(){};}
子类Buferedreader_
package com.stulzl.reader_;///模拟处理流/包装流  622public class BufferedReader_ extends Reader_{//视为包装流    private Reader_ reader_;////直接定义抽象Reader_类型的属性    //构造器,根据传输的对象参数,动态绑定相应类的方法 ///涉及多态和动态绑定    public BufferedReader_(Reader_ reader_) {//可以接收Reader_子类对象        this.reader_ = reader_;    }    ///调用底层(子类)readFile()方法    public void readFile() { ///包装一层        reader_.readFile();    }    //提供方法 使方法更加灵活,多次阅读文件    public void readFiles(int num){        //循环调用方法        for (int i = 0; i < num; i++) {            //因为reader_是抽象的,其他类别继承并实现了方法,所以可以调用            ///涉及多态和动态绑定            reader_.readFile();///调用Reader_readFile()        }    }    //扩展 readString, 字符串数据的批量处理    public void readStrings(int num) {        for(int i = 0; i <num; i++) {            reader_.readString();        }    }}
子类Filereader
package com.stulzl.reader_;public class FileReader_ extends Reader_{//视为节点流    ///实现抽象类中的方法    public void readFile(){        System.out.println("操作文件..";    }}
子类Stringreader
package com.stulzl.reader_;public class StringReader_ extends Reader_{//视为节点流    ///实现抽象类中的方法    public void readString(){        System.out.println(“读字符串…”;    }}
4.处理流的功能主要体现在以下两个方面:623

1.性能提高:输入输出效率主要是通过增加缓冲来提高的。

2.操作方便:处理流可以提供一系列方便的方法一次输入输出大量数据,使用更加灵活方便

5.处理流Bufferedreader和bufferedwriter623

➢bufferedreader和bufferedwriter属于字符流,按字符读取数据

➢关闭时处理流,只需关闭外层流即可

5.1案例演示Buferedreader623

使用bufferedreader阅读文本文件并显示在控制台上

com中的代码.stulzl.bufferedreader_.包中BufferedReader_
package com.stulzl.bufferedreader_;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;///演示Bufferedreader的使用  623//使用bufferedreader阅读文本文件,控制台public显示 class BufferedReader_ {    public static void main(String[] args) throws Exception {        String filePath = "e:\\story.txt";        BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));        //读取        String line;////用于接收readLine()的返回值        //说明        //1. bufferedReader.readLine() 是按行读取文件        //2. 当返回 null 时,读完表示文件        while((line = bufferedReader.readLine())!=null){            System.out.println(line);        }        //关闭流        请注意///这里只需关闭 BufferedReader ,底层会自动关闭,因为底层会自动关闭 节点流        bufferedReader.close();    }}
5.2案例演示BufferedWriter624

使用BufferedWriter将”hello,世界中国”写在文件中

com中的代码.stulzl.bufferedwriter_.包中BufferedWriter_
package com.stulzl.bufferedwriter_;import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;///案例演示BufferedWriteriter  624//使用BuferedWriteriter 将”hello,“世界中国”,在文件中写入public class BufferedWriter_ {    public static void main(String[] args) throws IOException {        String filePath = "e:\\ok.txt";        ///创建BufferedWriter对象        //说明:        //1. new FileWriter(filePath, true) 表示以追加的方式写入        //2. new FileWriter(filePath) , 表示以覆盖的形式写入        ///覆盖方式        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));        ///添加方式        //BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath,true));        bufferedWriter.write("hello,世界中国”);///写字符串        bufferedWriter.newLine();///插入与系统相关的换行符        bufferedWriter.write(hello2,世界中国”);        bufferedWriter.newLine();        bufferedWriter.write(hello3,世界中国”);        bufferedWriter.newLine();        //关闭流        bufferedWriter.close();    }}
5.3bufferedreader和bufferedwriter结合完成复制案例6255com中的代码.stulzl.buffered_copy.包中BufferedCopy_
package com.stulzl.buffered_copy;import java.io.*;//BufferedReader 和 结合BufferedWriter 拷贝案例  625public class BufferedCopy_ {    public static void main(String[] args) {        ///老韩说明        //1. BufferedReader 和 BufferedWriter 是安照字符操作        //2. 不要去操作 二进制文件[声音,视频,doc, pdf ], 文件损坏可能是可能的                String srcFilePath = "e:\\story.txt";        String destFilePath = "e:\story2.txt";        BufferedReader bufferedReader = null;        BufferedWriter bufferedWriter = null;        String line;        try {            bufferedReader = new BufferedReader(new FileReader(srcFilePath));            bufferedWriter = new BufferedWriter(new FileWriter(destFilePath));            //读取            while((line=bufferedReader.readLine())!=null){                ///每读一行写一行                bufferedWriter.write(line);                //换行                bufferedWriter.newLine();            }            System.out.println(“复制完…”;        } catch (IOException e) {            e.printStackTrace();        } finally {            //关闭流            try {                if(bufferedReader!=null){                    bufferedReader.close();                }                if(bufferedWriter!=null){                    bufferedWriter.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }}