【Java】の基础——IO

来源:互联网 发布:python config.get 编辑:程序博客网 时间:2024/06/03 11:24

Java IO

Java IO即Java 输入输出系统。

在Java IO中,流是一个核心的概念。流从概念上来说是一个连续的数据流。你既可以从流中读取数据,也可以往流中写数据。流与数据源或者数据流向的媒介相关联。
在Java IO中流既可以是字节流(以字节为单位进行读写),也可以是字符流(以字符为单位进行读写)。

IO的类型

从是读媒介还是写媒介的维度看,Java IO可以分为:

输入流:InputStream和Reader
输出流:OutputStream和Writer

而从其处理流的类型的维度上看,Java IO又可以分为:

字节流:InputStream和OutputStream
字符流:Reader和Writer

字节流和字符流的相互转换

  1. 从字节流到字符流:InputStreamReader、OutputStreamWriter类可以实现。
  2. 从字符流到字节流:可以从字符流中获取char[]数组,转换为String,然后调用String的API函数getBytes() 获取到byte[],然后就可以通过ByteArrayInputStream、ByteArrayOutputStream来实现到字节流的转换。

buffer缓冲流

BufferedInputStream和BufferedOutputStream,BufferedReader和BufferedWriter
在进行磁盘或网络IO时,原始的InputStream对数据读取的过程都是一个字节一个字节操作的,而BufferedInputStream在其内部提供了一个buffer,在读数据时,会一次读取一大块数据到buffer中,这样比单字节的操作效率要高的多,特别是进程磁盘IO和对大量数据进行读写的时候。

网络媒介的IO:

同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO

Java BIO :

同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

Java NIO :

同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

Java AIO(NIO.2) :

异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理.

原创粉丝点击