节点流和处理流

news2024/11/15 12:57:30
  1. 节点流可以从一个特定的数据源读写数据,如FileReader,FileWriter
  2. 处理流(也叫包装流)是“连接”在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,也更加灵活,如BufferedReader,BufferedWriter
  3. 包装流可以从很多数据源上读写数据,因为在包装类内部有一个抽象基类属性。只要是这个抽象基类的子类包装流都可以进行读写,【子类就是后缀有基类的类名,例如Render的子类有FileReader,StringReader等。Writer抽象基类同样也是】
  4. 节点流和处理流的区别和联系
    1. 节点流是底层流/低级流,直接跟数据源相接
    2. 处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出
    3. 处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源连接
  5. 处理流的功能主要体现在以下两个方面
    1. 性能的提高:主要以增加缓冲的方式来提高输入输出的效率
    2. 操作的便捷:处理流可以提供了一系列便捷的方法来一次输入输出大批量的数据,使用更加灵活方便。
  6. package com.jshedu.moshi;
    
    /**
     * @author Mr.jia
     * @version 1.0
     */
    
    public abstract class Reader_ {//抽象类
        public void readFile(){};
        public void readString(){};
        //都继承Reader_,关键BufferedReader_里有一个private Reader_ reader_;属性
        //然后通过BufferedReader_里的方法调用Reader_子类的实现方法。
        //称为包装流
    
    
    }
    //包装流
    class BufferedReader_ extends Reader_{
        //继承了Reader_,它里面的方法也能用了
        private Reader_ reader_;//属性是Reader_类型
    
    
        public BufferedReader_(Reader_ reader_) {
            //这个构造器参数可以接受Reader_类型,也可以接收其子类
            this.reader_ = reader_;
        }
        public void readFile(){//封装一层
            reader_.readFile();
        }
        //让方法更灵活,多次读取文件
        public void readFiles(int num){
            for (int i = 0; i < num; i++) {
                reader_.readFile();
            }
        }
        //扩展readString,批量处理字符串数据
        public void readStrings(int num){
            for (int i = 0; i < num; i++) {
                reader_.readString();
            }
        }
    }
    //节点流
    class FileReader_ extends Reader_{
        public void readFile(){
            System.out.println("对文件进行读取...");
        }
    }
    //节点流
    class StringReader_ extends Reader_{
        public void readString(){
            System.out.println("读取字符串...");
        }
    }
    
    package com.jshedu.moshi;
    
    /**
     * @author Mr.jia
     * @version 1.0
     */
    
    public 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_,关键BufferedReader_里有一个private Reader_ reader_;属性
    然后通过BufferedReader_里的方法调用Reader_子类的实现方法。
    称为包装流

  7. BufferedReader和BufferedWriter属于字符流,是按照字符来读取数据的
  8. 关闭时处理流,只需要关闭外层流即可
  9. package com.hspedu.reader_;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    
    /**
     * @author 韩顺平
     * @version 1.0
     * 演示bufferedReader 使用
     */
    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();
    
        }
    }
    

    BufferedReader的使用

  10. package com.hspedu.writer_;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    
    /**
     * @author 韩顺平
     * @version 1.0
     * 演示BufferedWriter的使用
     */
    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();
    
        }
    }
    

    演示BufferedWriter的使用

  11. package com.hspedu.writer_;
    
    import java.io.*;
    
    /**
     * @author 韩顺平
     * @version 1.0
     */
    public class BufferedCopy_ {
    
        public static void main(String[] args) {
    
    
            //老韩说明
            //1. BufferedReader 和 BufferedWriter 是安装字符操作
            //2. 不要去操作 二进制文件[声音,视频,doc, pdf ], 可能造成文件损坏
            //BufferedInputStream
            //BufferedOutputStream
            String srcFilePath = "e:\\a.java";
            String destFilePath = "e:\\a2.java";
    //        String srcFilePath = "e:\\0245_韩顺平零基础学Java_引出this.avi";
    //        String destFilePath = "e:\\a2韩顺平.avi";
            BufferedReader br = null;
            BufferedWriter bw = null;
            String line;
            try {
                br = new BufferedReader(new FileReader(srcFilePath));
                bw = new BufferedWriter(new FileWriter(destFilePath));
    
                //说明: readLine 读取一行内容,但是没有换行
                while ((line = br.readLine()) != null) {
                    //每读取一行,就写入
                    bw.write(line);
                    //插入一个换行
                    bw.newLine();
                }
                System.out.println("拷贝完毕...");
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //关闭流
                try {
                    if(br != null) {
                        br.close();
                    }
                    if(bw != null) {
                        bw.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
    
        }
    }
    

    Buffered字符处理流Copy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/456427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE IP协议详细讲解

详细讲解IP协议 O > O 文章目录 JavaEE & IP协议1. 地址管理1.1 IP协议报文格式1.2 动态分配IP地址1.3 NAT机制1.4 IP协议1.4 IP协议工作过程1.5 IPV6协议1.6 IP地址的组成1.7 特殊的IP地址 2. 路由选择 JavaEE & IP协议 1. 地址管理 我们希望&#xff0c;每个网络…

免费AI人工智能在线写作伪原创-百度ai自动写文章

免费伪原创洗稿工具 免费伪原创洗稿工具现在终于推出了&#xff01;你是否在写作的时候&#xff0c;经常因为缺乏灵感而苦恼&#xff1f;或者&#xff0c;你在撰写文章的时候&#xff0c;发现自己的语言表述不够丰富&#xff0c;缺乏变化&#xff0c;语句重复率太高&#xff1f…

从零学习SDK(9)SDK的局限

SDK是一种便捷而实用的工具&#xff0c;但软件开发者不能视SDK为万能的解决之道&#xff0c;SDK也有局限性&#xff0c;并且这些局限性可能会十分“致命”。软件开发者在选择SDK产品之前&#xff0c;需要先了解SDK的不足之处。本文将介绍SDK存在的三种问题&#xff0c;以引起软…

新手必看!ChatGPT常见问题总整理,你遇到了几个?

随着ChatGPT火爆全球,使用人数以指数型成长,许多使用上的问题呈现在网路上。 今天这篇文章会用实作的方式带大家了解ChatGPT有哪些常见问题,以此减少踩坑的机会。 并用简单的示例让大家感受GPT-3.5与GPT-4的能力差异,希望对大家有所帮助。 大家会有这些问题,其实就是希望…

【手把手做ROS2机器人系统开发一】开发环境搭建

【手把手做ROS2机器人系统开发一】开发环境搭建 目录 【手把手做ROS2机器人系统开发一】开发环境搭建 一、专栏介绍&#xff1a; 二、开发环境搭建&#xff1a; 1.Ubuntu系统安装 2.ROS2系统环境安装 3.测试系统运行 一、专栏介绍&#xff1a; 大家好&#xff0c;今天给大家…

哈希表企业应用-淘宝分布式文件系统核心存储引擎

哈希表企业应用-淘宝分布式文件系统核心存储引擎-基本概述 淘宝网 谁都知道 是一个电子商务网站,可能是第一批电商模式 b2c 当然从一个技术人员讲只有一点 淘宝店铺商品存储到哪里 感觉有点像废话 :肯定在仓库里 不,我说的是 :商品详情页以及商品介绍 存储 在哪里 我知道大家都…

【图论】弗洛伊德Floyd算法模板及实战(LeetCode743)

文章目录 框架实战 Floyd-Warshall算法本质是一种动态规划&#xff0c;可以用于解决任意两点间的最短路径&#xff08;多源最短路径问题&#xff09;&#xff0c;支持负权&#xff0c;而Dijkstra算法则不支持负权。 框架 第一步&#xff1a; 定义s[i][j]存储i到j的(最短)路径长…

字典树/前缀树Trie(附Java代码)

字典树/前缀树 1.字典树Trie1.1 字典树举例 2.代码实现2.0 代码结构2.1方式一&#xff1a;使用数组存储孩子节点2.2方式二&#xff1a;使用HashMap存储孩子节点 在计算机科学中&#xff0c;trie&#xff0c;又称前缀树或字典树&#xff0c;是一种有序树&#xff0c;用于保存关联…

一文带你上高速入门linux(含常用命令语法、说明、举例)

一文带你入门linux常用命令&#xff08;含举例和详细说明&#xff09; Linux系统操作介绍1. Linux发行版2. Linux文件系统3. Linux基本命令4. Linux用户和权限管理5. 软件包管理6. 系统管理7. 网络管理8. Shell脚本9. 文本处理10. 系统监控和日志11. 总结 Linux系统操作介绍 L…

塔望3W消费战略全案丨品类重新定义 打造金皇品高端速食第一面

金皇品 客户&#xff1a;上海皇品食品有限公司 品牌&#xff1a;金皇品 服务&#xff1a;3W消费战略 品牌全案 项目背景 金皇品隶属于上海皇品食品有限公司&#xff0c;品牌创立于1995年。产品以原汁作为核心卖点&#xff0c;通过线下渠道的密集耕耘&#xff0c;在浙江&…

NPM 发包 js 文件并支持 ts 使用(包含 gulp 打包压缩)

主篇 npm 上传发布自定义组件以及使用详细流程。 npm login 报错&#xff1a;Unexpected token < in JSON at position 0 while parsing near ‘<!DOCTYPE HTML PUBLI…’。 登录 npm $ npm login Username: dengzemiao Password: Email: (this IS public) xxxx163.co…

【李宏毅】GNN学习笔记

视频链接 [TA 補充課 Graph Neural Network (1/2) (由助教姜成翰同學講授) - YouTube] [TA 補充課 Graph Neural Network (2/2) (由助教姜成翰同學講授) - YouTube] [speech.ee.ntu.edu.tw/~tlkagk/courses/ML2020/GNN.pdf] Introduction 应用&#xff1a;分类、Generatio…

Docker 快速入门

1、Docker 简介 Docker是一个开源的容器引擎&#xff0c;它可以帮助我们更快地交付应用。Docker可将应用程序和基础设施层隔离&#xff0c;并且能将基础设施当作程序一样进行管理。使用Docker&#xff0c;可更快地打包、测试以及部署应用程序&#xff0c;并可减少从编写到部署…

mysql主从复制搭建--待实践完善

一、什么是mysql主从复制 参考链接&#xff1a;MySQL主从介绍_rain_yunlx的博客-CSDN博客 Linux下搭建Mysql主从复制详细步骤&#xff08;Mysql版本5.7.35&#xff09;_linuxmysql主从_Direct_的博客-CSDN博客 Linux环境MySQL数据库主从复制保姆级教程_linux主从复制_小学生…

山东大学2023操作系统实验2

目录 (1)操作系统实验2内容: (2)完成方式: (3)使用函数和功能: 1.pipe函数与有关的功能 2.pipe的返回值 3.pipe的参数 4.使用事项: (4)实现代码 (5)实现效果 (1)操作系统实验2内容: 创建三个并行的进程,分别完成计算F(x),F(y),F(x,y)三个函数的计算 (2)完成方式: 实验…

再也不去字节跳动面试了,6年测开经验的真实面试经历.....

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了快6年软件测试员。。。为了进大厂&#xff0c;也花了很多时间和精力在面试准备上&#xff0c;也刷了很多题。但题刷多了之后有点怀疑人生&#xff0c;不知道刷的这些题在之后的工作中能不能用到&…

18.Java异常

Java异常 Java 中的异常&#xff08;Exception&#xff09;又称为例外&#xff0c;是一个在程序执行期间发生的事件&#xff0c;它中断正在执行程序的正常指令流。为了能够及时有效地处理程序中的运行错误&#xff0c;Java中引入了异常类的概念。异常类的引入即明确了程序在执…

QT stackUnder 用法小结

stackUnder是什么意思&#xff1f;根据官方的解析&#xff0c;简而言之一句话&#xff1a;把窗口的小部件放置于父窗口的堆栈窗口中。本文将通过一则简单的示例&#xff0c;来具体解析stackUnder该如何使用。 官方解析 void QWidget::stackUnder(QWidget *w) Places the widg…

ThinkPHP6之数据库操作上

ThinkPHP6之数据库操作上 前言1. 数据库配置2. 数据库操作1. 查询操作2. 插入操作3. 修改4. 删除5. 其他 3.数据集总结 前言 注意&#xff0c;tp6在进行语法学习的时候都是在app/index.php中写代码的&#xff0c;代码写在index函数下面&#xff0c;而且tp6自带的文件都是由自动…

经常打电话的人用什么耳机好?通话质量好的蓝牙耳机推荐

用蓝牙耳机听歌、刷视频、玩游戏已经成为趋势&#xff0c;作为人手必备的一件单品&#xff0c;在款式层出不穷&#xff0c;功能各异的蓝牙耳机市场&#xff0c;许多人都不知道究竟什么蓝牙耳机好&#xff1f;下面整理了几款通话质量好的蓝牙耳机。 一、南卡小音舱Lite2蓝牙耳机…