转载自并发编程网 – ifeve.com本文链接地址:Java IO: 流
Java IO的用途汇总:
文件访问
网络访问
内存缓存访问
线程内部通信(管道)
缓冲
过滤
解析
读写文本 (Readers / Writers)
读写基本类型数据 (long, int etc.)
读写对象
1.流和数组的区别
流和数组不一样,不能通过索引读写数据。
在流中,你也不能像数组那样前后移动读取数据,除非使用RandomAccessFile 处理文件。
流仅仅只是一个连续的数据流。
流中的数据只能够顺序访问。
某些类似PushbackInputStream 流的实现允许你将数据重新推回到流中,以便重新读取。然而你只能把有限的数据推回流中,并且你不能像操作数组那样随意读取数据。
2.Java IO流的分类
字节流:通常以“stream”命名,比如InputStream和OutputStream。除了DataInputStream 和DataOutputStream 还能够读写int, long, float和double类型的值以外,其他流在一个操作时间内只能读取或者写入一个原始字节。
字符流:通常以“Reader”或者“Writer”命名。字符流能够读写字符(比如Latin1或者Unicode字符【1个字符占2个字节】)。可以浏览Java Readers and Writers获取更多关于字符流输入输出的信息。
节点流:程序用于直接操作目标设备所对应的类叫节点流。比如FileInputStream;
处理流:程序通过一个间接流类去调用节点流类,以达到更加灵活方便地读写各种类型的数据,这个间接流类就是处理流。比如BufferedInputStream;
https://blog.csdn.net/jingzi123456789/article/details/72123937
输入流的基类InputStream
输出流的基类OutputStream
组合流BufferedIntputStream/BufferedOutputStream(提供缓存区)
BufferedIntputStream/BufferedOutputStream 默认大小为8*1024B(8KB),为了更好地使用内置缓冲区的磁盘,同样建议把缓冲区大小设置成1024的整数倍。
---------------------------------------------------------------------------------------------------------------DataInputStream/DataOutputStream 读取/写入Java基本类型数据
Java IO类概述表
image.png
BIO,NIO,AIO
BIO:同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。
NIO:同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,对应 java.nio 包,提供了 Channel , Selector,Buffer等抽象。
AIO (Asynchronous I/O):异步非阻塞的IO模型。异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。
网友评论