IO 和 NIO
来源:互联网 发布:suse11网络配置 编辑:程序博客网 时间:2024/06/17 00:59
IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。
1. 标准IO
Java 标准 IO 类库是 io 面向对象的一种抽象。基于本地方法的底层实现,我们无须关注底层实现。
从处理数据类型上,可以分为字节流和字符流;从数据流向上,可以分为输入流和输出流。
字节流均继承自InputStream和OutputStream这两个抽象类。字符流均继承自Reader和Writer这两个抽象类。
字节流和字符流的区别,除了读写单位和处理对象不同外,在文件操作中,字节流在操作时不使用缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
输入流和输出流的区别在于流向上,流入程序的为输入,从程序流出的为输出。
Java 标准 IO 类库提供了数量众多的封装类,为了更加从容的使用这些类,使用标准IO时可以参考以下原则:
- 考虑最原始的数据格式是什么
- 二进制格式(只要不能确定是纯文本的),使用InputStream/OutputStream类的子类。
- 纯文本格式(含纯英文与汉字或其他编码方式),使用Reader/Writer类型子类。
- 数据方向
- 输入,使用Reader/InputStream类的子类
- 输出,使用Writer/OutputStream类的子类
- 是否需要转换流
- 若需要Stream -> Reader/Writer,使用InputStreamReader/OutputStreamWriter。
- 数据来源
- 文件: FileInputStream、 FileOutputStream、FileReader、FileWriter
- byte[]:ByteArrayInputStream、ByteArrayOutputStream
- Char[]:CharArrayReader、 CharArrayWriter
- String:StringBufferInputStream、StringBufferOuputStream、StringReader、StringWriter
- 网络数据流:InputStream、OutputStream、Reader、Writer
- 是否需要用到缓冲区
- BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
- 是否有特殊需要
- 格式化输出:PrintStream、PrintWriter
- 对象输入输出: ObjectInputStream、ObjectOutputStream
- 进程间通信: PipeInputStream、PipeOutputStream、PipeReader、PipeWriter
- 合并输入: SequenceInputStream
- 更特殊的需要: PushbackInputStream、PushbackReader、LineNumberInputStream、LineNumberReader
操作示例可参考《java中的IO整理》
2. NIO
Java NIO是JDK1.4之后新出的一套IO接口,这里的的新是相对于原有标准的Java IO和Java Networking接口。NIO提供了一种完全不同的操作方式:
Channel和Buffer
标准IO的编程接口是面向字节流和字符流的。而NIO是面向通道和缓冲区的,数据总是从通道中读到Buffer缓冲区内,或者从Buffer写入到通道中。
Buffer。Buffer是一块连续的内存块,是NIO数据读或写的中转地,其只能和Channel对接。
Channel。Channel是数据的源头或者目的地,用于向Buffer提供数据或者读取Buffer数据,Buffer的唯一接口,支持异步IO。
Non-blocking
NIO中的N可以理解为Non-blocking,不单纯是New。Java NIO使我们可以进行非阻塞IO操作。比如说,单线程中从通道读取数据到buffer,同时可以继续做别的事情,当数据读取到buffer中后,线程再继续处理数据。写数据也是一样的。
Selectors
Selector可以检测多个通道的事件状态(例如:链接打开,数据到达),这样单线程就可以操作多个通道的数据,实现多路 (non-bloking) 非阻塞式的高伸缩性网络 I/O 。
具体使用方法请参考《Java NIO 教程》
- java io和nio
- java IO和NIO
- IO和NIO
- IO和NIO
- Java IO和NIO
- NIO和IO
- Java NIO和IO
- 关于io和nio
- NIO和IO(一)
- IO 和 NIO
- Java NIO和IO
- java NIO和IO
- IO和NIO
- java nio和io
- nio.2 nio 和传统io
- NIO理解和io区别
- IO和NIO的区别
- Java NIO 和IO 对比
- 6个值得推荐的Android开源框架简介
- How_Use_ UIAlertController
- 时间
- Linux Shell编程-条件判断
- 系统集成项目管理工程师—重点计算题
- IO 和 NIO
- Configuring vim
- 《C++ Primer Plus(第六版)》(2)(第三章 处理数据 笔记和答案)
- 集合框架顶层Collection接口的常见方法(集合共性功能)
- Java面向对象编程(一)
- 《Effective C++》学习笔记
- 1062. Talent and Virtue (25)
- 【node.js】使用node.js搭建一个本地web服务器
- 关于JQuery中的$.each()与$().each的理解