ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

IO流+原理和疑问

2022-08-11 15:30:53  阅读:162  来源: 互联网

标签:read 处理 IO 缓冲区 原理 byte 节点 疑问








  • 1.IO流可以理解成一个管子,管子连接着IO流关联的源,管道中是不存放数据的,但是会缓存要交换的数据

  • 2.使用read(),write()方法触发数据读写 read(),read(byte[] b),read(byte[] b,int off,int len) 方法参数解释






节点流和处理流


  • 节点流:是底层流,直接跟数据源相连

  • 处理流(包装流/高级流):包装节点流,既可以消除不同节点流的是实现差异,亦可以提供方便的方法来完成输入输出

  • 真正工作的是节点流,处理流是利用多态和动态绑定来实现便捷功能的,因此只需要外层流,即关闭处理流底层会自动关闭节点流






问:IO流为什么要用缓冲区?


  • 缓冲区的作用:减少程序频繁从文件中获取数据和写入数据。比如read()是一个一个字节的读取,而read(byte[] b)是每次按照byte数组的大小读取。

问:IO流中可以通过自定义一个数组来当做缓冲区,为什么还要使用Buffered缓冲处理流包装呢?


  • "Buffered里面就提供了缓冲块,套上这高级流就不用自己写缓冲块了,有现成的流使用方便。"

  • 隐藏了底层的节点流的差异,并对外提供了更方便的输入/输出功能,让我们只关心高级流的操作。

  • 只需要关闭处理流即可,关闭处理流后,自动会关闭基本流。

  • IO流中具有缓冲区的子类有四个:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter。









有哪些IO流



节点流:

1.File文件流:对文件进行读、写操作。

2.Memory

  • 内存数组读写数据: CharArrayReader与 CharArrayWriter、ByteArrayInputStream与ByteArrayOutputStream。
  • 内存字符串读写数据 StringReader、StringWriter、StringBufferInputStream。

3.Pipe管道流。:实现管道的输入和输出(进程间通信)


处理流:

1.Buffering缓冲流:在读入或写出时,对数据进行缓存,以减少I/O的次数:BufferedReader与BufferedWriter、BufferedInputStream与BufferedOutputStream。

2.Filtering 滤流:在数据进行读或写时进行过滤:FilterReader与FilterWriter、FilterInputStream与FilterOutputStream。

3.Converting between Bytes and Characters 转换流:按照一定的编码/解码标准将字节流转换为字符流,或进行反向转换(Stream到Reader):InputStreamReader、OutputStreamWriter。

4.Object Serialization 对象流 :ObjectInputStream、ObjectOutputStream。

5.DataConversion数据流: 按基本数据类型读、写(处理的数据是Java的基本类型(如布尔型,字节,整数和浮点数)):DataInputStream、DataOutputStream 。

6.Counting计数流: 在读入数据时对行记数 :LineNumberReader、LineNumberInputStream。

7.Peeking Ahead预读流: 通过缓存机制,进行预读 :PushbackReader、PushbackInputStream。

8.Printing打印流: 包含方便的打印方法 :PrintWriter、PrintStream。





















参考链接:

https://blog.csdn.net/weixin_46055348/article/details/125713128

https://www.zhihu.com/question/298765555

https://blog.csdn.net/0602/article/details/8586



标签:read,处理,IO,缓冲区,原理,byte,节点,疑问
来源: https://www.cnblogs.com/kakafa/p/16575966.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有