节点流和处理流

举报
周小末天天开心 发表于 2022/12/31 17:32:37 2022/12/31
【摘要】 节点流和处理流基本介绍(1)节点流可以从一个特定的数据源读写数据,如FileReader,FileWriter。(2)处理流(包装流)是“连接”在已存在的流(节点流或处理流之上),为程序提供更为强大的读写功能,也更加灵活,如BufferedReader、BufferedWriter。节点流和处理流的区别和联系(1)节点流是底层流/低级流,直接跟数据源相接。(2)处理流(包装流)包装节点流,既...

节点流和处理流

基本介绍

(1)节点流可以从一个特定的数据源读写数据,如FileReader,FileWriter。

(2)处理流(包装流)是“连接”在已存在的流(节点流或处理流之上),为程序提供更为强大的读写

功能,也更加灵活,如BufferedReader、BufferedWriter。

节点流和处理流的区别和联系

(1)节点流是底层流/低级流,直接跟数据源相接。

(2)处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来

完成输入输出。

(3)处理流(包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连。

处理流的功能主要体现在以下两个方面

(1)性能的提高:主要以增加缓冲的方式来提高输入输出的效率。

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

便。

处理流BufferedReader和BufferedWriter

1)BufferedReader和BufferedWriter属于字符流,是按照字符来读取数据的

2)关闭处理流时,只需要关闭外层流即可

(1)使用BufferedReader读取文本文件,并显示在控制台

import java.io.BufferedReader;
import java.io.FileReader;

public class BufferedReader_ {
    public static void main(String[] args) throws Exception {
        String filePath = "e:\\a.java";
        //创建 bufferedReader
        BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
        
        //读取
        String line; //按行读取, 效率高
        //说明
        //1. bufferedReader.readLine() 是按行读取文件
        //2. 当返回 null 时,表示文件读取完毕
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }
        
        //关闭流, 这里注意,只需要关闭 BufferedReader ,因为底层会自动的去关闭 节点流
        //FileReader。
        /*
            public void close() throws IOException {
                synchronized (lock) {
                    if (in == null)
                        return;
                    try {
                        in.close();//in 就是我们传入的 new FileReader(filePath), 关闭了. 
                        } finally {
                            in = null;
                            cb = null;
                        }
                    }
                }
        */
        
        bufferedReader.close();
    }
}

(2)使用BufferedWriter将“Hello”,写入到文件中

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

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.write("Hello");
        bufferedWriter.newLine();//插入一个和系统相关的换行
        bufferedWriter.write("Hello2");
        bufferedWriter.newLine();
        bufferedWriter.write("Hello3");
        bufferedWriter.newLine();
        //说明:关闭外层流即可 , 传入的 new FileWriter(filePath) ,会在底层关闭
        bufferedWriter.close();
    }
}

BufferedInputStream和BufferedOutputStream

BufferedInputStream是字节流,在创建BufferedInputStream时,会创建一个内部缓冲区数组。

BufferedOutputStream是字节流,实现缓冲的输出流,可以将多个字节写入底层输出流中,而不必对每次字节写入调用底层系统。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。