之前写过一篇文章,关于介绍IO模型的,在里面就讲到了NIO:
本文章不对Java中IO的具体如何使用做过多的解释,主要是IO流总结以及AIO、BIO、NIO之间做一个比较。
#在Java中的IO流,其实就是输入输出。
根据输入输出文件的类型不同又可以继续划分:
字节流:数据流中最小的数据单元是字节。
二进制文件的输入输出(InputStream、OutputStream),也就是说可以操作任何类型数据。
字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。
特殊的二进制文件的输入输出(Reader、Wirter),例如文本格式,采用特定编码格式。
而后根据这四个抽象类衍生出其他流:
字符缓冲流、字节缓冲流、转换流、打印流、对象操作流、序列流、处理流、节点流等。
#字节流与字符流的区别?
缓存区的概念:字节流是直接操作文件本身,而字符流会经过缓冲区(内存),通过了缓冲区才会对文件进行操作。
流一旦打开就必须关闭,使用close方法,流关闭一般放入finally语句块中。
#处理流如何关闭?
如果调用的是处理流,那么就关闭处理流。
#read and writer
InputStream里的read()返回的所读取的字节的int型(范围0-255),read(byte [ ] data)将读取的字节储存在这个数组。返回的就是传入数组参数个数。
OutputStream里面的write()是将指定字节传入数据源。
好了IO流的部分就讲到这里,这里不对IO流的具体操作进行解释。
之前有篇文章阐述了IO模型以及NIO的场景。
#这里对AIO、BIO、NIO进行下比较:
AIO:异步非阻塞
例子:叫外卖,点个外卖,继续打王者。
BIO:同步阻塞
例子:订餐,出去打王者,时间到了,回来看看问下老板好了没有。
NIO:同步非阻塞
例子:去餐厅吃饭,做下点餐,一直等,不能走,等到菜上来为止。