IO流+原理和疑问
作者:互联网
-
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