IO流 p5 节点流和处理流

这篇具有很好参考价值的文章主要介绍了IO流 p5 节点流和处理流。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

节点流 和 处理流

目录
  • 节点流 和 处理流
      • 一、基本介绍
      • 二、节点流 和 处理流 的区别和联系
      • 三、处理流的功能主要体现在以下两个方面:
      • 四、处理流 — BufferedReader和BufferedWriter
  • 节点流和处理流一览图:

IO流 p5 节点流和处理流

​ 【图片来源】http://t.csdn.cn/d52a1

一、基本介绍

  1. 节点流:节点流可以从一个特定的数据源读写数据,如FIleReader、FileWriter

    IO流 p5 节点流和处理流

    IO流 p5 节点流和处理流

  2. 处理流:处理流(也叫包装流)是“连接”在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,也更加灵活,如BufferedReader、BufferedWriter。使用了修饰器设计模式。就是面向对象的封装思想,消除不同数据之间的差异性,仅对外暴露接口。

    IO流 p5 节点流和处理流

IO流 p5 节点流和处理流

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

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

  2. 处理流(包装流)包装结点流,即可以消除不同节点的实现差异,也可以提供更方便的方法来完成输入输出。

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

    /**
     * @author
     * @version 1.0
     * 模拟修饰器设计模式
     */
    public class Test_ {
        public static void main(String[] args) {
            BufferedReader_ bufferedReader_ = new BufferedReader_(new FileReader_());
            bufferedReader_.readFiles(10);
    
            //希望通过BufferedReader_ 多次读取字符串
            BufferedReader_ bufferedReader_1 = new BufferedReader_(new StringReader_());
            bufferedReader_1.readStrings(5);
        }
    }
    abstract class Reader_ {
        public void readFile_(){}
        public void readString_(){}
    
        //在Reader_抽象类,使用read方法统一管理
    //    public abstract void read();
        //后面在调用时就,利于对象动态绑定机制,绑定到对应的实现子类即可。
    }
    
    // 模拟节点流
    class FileReader_ extends Reader_{
        public void readFile_(){
            System.out.println("对文件进行读取……");
        }
    //    public void read(){
    //        System.out.println("对文件进行读取……");
    //    }
    }
    
    //模拟节点流
    class StringReader_ extends Reader_{
        public void readString_(){
            System.out.println("读取字符串……");
        }
    //    public void read(){
    //        System.out.println("读取字符串……");
    //    }
    }
    
    
    //模拟处理流/包装流
    class BufferedReader_ extends Reader_{
        //注意装饰器模式中,装饰类和被装饰类(约定俗成,而非必须)继承自同一个父类。
        private Reader_ reader_;//属性是 Reader_
    
        //接收Reader_子类对象
        public BufferedReader_(Reader_ reader_) {
            this.reader_ = reader_;
        }
    
        public void readFile(){
            reader_.readFile_();
        }
    
        //让方法更灵活,多次读取文件,或者加缓冲char[]....
        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_();
            }
        }
    }
    
    

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

  1. 性能的提高:主要以增加缓冲的方式来提高输入和输出的效率。
  2. 操作的便捷:处理流提供了一系列便捷的方法来一次输入输出大批量的数据就,使用更加灵活方便。

四、处理流 — BufferedReader和BufferedWriter

  • BufferedReader 和 BufferedWriter属于字符流,是按照字符来读取数据的;
  • 关闭处理流,只需关闭外层流即可,关闭外层流(包装流)时会自动关闭包装的节点流;
  • BufferedReader 和 BufferedWriter 是安装字符操作,不要去操作二进制文件,可能造成文件损坏;
  1. BufferedReader

    IO流 p5 节点流和处理流

    IO流 p5 节点流和处理流

    • 构造方法摘要

      Constructor and Description
      BufferedReader(Reader in)创建使用默认大小的输入缓冲区的缓冲字符输入流。
      BufferedReader(Reader in, int sz)创建使用指定大小的输入缓冲区的缓冲字符输入流。
    • 方法摘要

      Modifier and Type Method and Description
      void close()关闭流并释放与之相关联的任何系统资源。
      Stream<String> lines()返回一个 Stream ,其元素是从这个 BufferedReader读取的行。
      void mark(int readAheadLimit)标记流中的当前位置。
      boolean markSupported()告诉这个流是否支持mark()操作。
      int read()读一个字符
      int read(char[] cbuf, int off, int len)将字符读入数组的一部分。
      String readLine()读一行文字。
      boolean ready()告诉这个流是否准备好被读取。
      void reset()将流重置为最近的标记。
      long skip(long n)跳过字符
    • 代码演示:文章来源地址https://www.toymoban.com/news/detail-472343.html

      import java.io.BufferedReader;
      import java.io.FileNotFoundException;
      import java.io.FileReader;
      import java.io.IOException;
      
      /**
       * @author
       * @version 1.0
       * 演示BufferedReader的使用
       */
      public class BufferedReader_ {
          public static void main(String[] args) throws IOException {
              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();
               *             } finally {
               *                 in = null;// in 就是我们传入的 new FileReader(filePath),关闭了
               *                 cb = null;
               *             }
               *         }
               *     }
               */
              bufferedReader.close();
          }
      }
      
      
    1. BufferedWriter

      IO流 p5 节点流和处理流

      IO流 p5 节点流和处理流

      • 构造方法摘要

        Constructor and Description
        BufferedWriter(Writer out)创建使用默认大小的输出缓冲区的缓冲字符输出流。
        BufferedWriter(Writer out, int sz)创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。
      • 方法摘要

        Modifier and Type Method and Description
        void close()关闭流,先刷新。
        void flush()刷新流。
        void newLine()写一行行分隔符。
        void write(char[] cbuf, int off, int len)写入字符数组的一部分。
        void write(int c)写一个字符
        void write(String s, int off, int len)写一个字符串的一部分。
      • 代码演示:

        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:\\BufferedWriter_.java";
                BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath, true));
                bufferedWriter.write("hello, 你好");
                //插入一个和系统 相关的换行
                bufferedWriter.newLine();
        //        bufferedWriter.write("\r\n");
                bufferedWriter.write("hello, 你好");
                //关闭外层流即可,传入的节点流会自动关闭
                bufferedWriter.close();
        
            }
        }
        
        

到了这里,关于IO流 p5 节点流和处理流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2-Linux 目录介绍及基本指令和操作命令

    一、目录介绍 /:表示的是根的意思 /bin:(binary)存放的是一些二进制文件,但是在Linux中二进制文件是可以被执行的。这个目录中的命令文件是给普通用户使用(非超级管理员用户)。 /etc:Linux下所有的配置文件都会存放到etc目录。 /home:是所有非root用户家目录的一个集

    2024年02月08日
    浏览(32)
  • 测试淘宝购物流程图,梳理基本流和备选流,测试用例

    1.访问淘宝,登录,登录成功,搜索键盘添加购物车选择支付方式 ,支付宝支付支付成功,订单完成。 2.访问淘宝,登录,登录成功,搜索键盘添加购物车选择支付方式 支付宝支付,余额不足,使用花呗,支付成功,订单完成 3.访问淘宝,登录,登录成功,搜索键盘添加购物车选

    2024年02月10日
    浏览(25)
  • 【Java基础教程】(四十五)IO篇 · 中:转换流、内存流和打印流(探索装饰设计模式与PrintStream类的进阶),文件操作案例实践、字符编码问题~

    掌握内存操作流、转换流、打印流的使用; 掌握文件复制操作; 掌握字符的主要编码类型以及乱码问题产生的原因; 虽然字节流与字符流表示两种不同的数据流操作,但是这两种流彼此间是可以实现互相转换的,而要实现这样的转换可以通过 InputStreamReader 、 OutputStreamWrit

    2024年02月16日
    浏览(30)
  • 机器学习之图像处理——基本概念知识介绍

    图像分析一般利用数学模型并结合图像处理的技术来分析底层特征和上层结构,到从而提取具有一定智能性的信息,其中对图片内容分析,图片内容识别和检测都离不开图像的分类。 图像分类目标:已有固定的分类标签集合,然后对于输入的图像,从分类标签集合中找出一个

    2024年02月07日
    浏览(30)
  • FFmpeg/opencv + C++ 实现直播拉流和直播推流(对视频帧进行处理)

    本文主要使用C++ ffmpeg库实现对除去webrtc的视频流进行拉流,而后经过自身的处理,而后通过将处理后的视频帧进行编码,最后进行推流处理。详情请看代码 参考链接: https://blog.csdn.net/weixin_45807901/article/details/129086344 https://blog.csdn.net/T__zxt/article/details/126827167

    2024年02月16日
    浏览(43)
  • 文件IO,目录IO的学习

    用法:#include“head.h”    -     在当前目录下寻找头文件 主函数的传参中,argc是传参的个数  ,const char *argv[]是一个指针数组,存放的指针类型数据 argv【n】,n=1/2/3 分别代表三个指针参数 标准示例:     off_t lseek(int fd, off_t offset, int whence);        功能:            

    2024年02月20日
    浏览(24)
  • 文件目录:FCB、索引节点、目录结构

    FCB(文件控制块): 存放控制文件需要的各种信息的数据结构,以实现按名存取。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。 FCB包含了文件的基本信息、存取控制信息、使用信息。最重要还是文件名信息和物理存放外存地址的信息,实现了文件名和文件之间

    2024年02月10日
    浏览(35)
  • 医学影像PACS系统源码: 三维重建基本后处理方法的介绍和说明

    多层面重建(MPR) 最大密度投影(MIP) 最小密度投影(MinIP) 表面阴影遮盖(SSD) 容积漫游技术(VRT) 曲面重建(CPR) 虚拟内镜技术(VE)   1、MPR MPR(Multi-Planar Reformatting),多平面重建,是将扫描范围内所有的轴位图像叠加起来再对某些标线标定的重组线所指定的组织进行

    2024年02月09日
    浏览(35)
  • 【flink番外篇】6、flink的WaterMark(介绍、基本使用、kafka的水印以及超出最大允许延迟数据的处理)介绍及示例(1) - 介绍

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月01日
    浏览(43)
  • 目录IO 2月19日学习笔记

     1. lseek        off_t lseek(int fd, off_t offset, int whence);        功能:             重新设定文件描述符的偏移量        参数:             fd:文件描述符             offset:偏移量             whence:                 SEEK_SET    文件开头                 SEEK_CUR    文件当前

    2024年02月20日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包