Java IO

来源:互联网 发布:西地那非淘宝 编辑:程序博客网 时间:2024/06/05 15:47

Java IO

吐槽

工作需要使用java IO,但是让人晕头转向,简直复杂二字形容;
听说很多人因为这个放弃java了,又是stream又是reader,还有file 哈哈,不像c语言一个fopen()就可以解决一大堆问题。

InputStream、OutputStream

处理字节流的抽象类

InputStreamReader OutputStreamWriter

处理字符流的抽象类,它们所操纵的基本单位是char类型。在字节和字符之间的桥梁就是编码格式。

InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.

OutputStreamWriter是字符流通向字节流的桥梁,它将字符流转换为字节流.

BufferedReader BufferedWriter

BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。

BufferedWriter 由Writer 类扩展而来,提供通用的缓冲方式文本写入, newLine使用平台自己的行分隔符,

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

FileOutputStream

对文件操作方面,文件通道FileChannel提供了与其它通道之间高效传输数据的能力,比传统的基于流和字节数组作为缓冲区的做法,要来得简单和快速。
FileInputStream: is meant for reading streams of raw bytes such as image data. For reading streams of characters, consider using FileReader

同步并阻塞 (I/O 方法)

I/O 的局限是它是面向流的、阻塞式的、串行的一个过程。
每个连接启动一个线程,tcp 连接,读写数据都是阻塞的,大量浪费了 CPU 的时间片和线程占用的内存资源,瓶颈在于不能处理过多的连接。

同步非阻塞 (NIO 方法,Java 1.4 引入)

解决blocking I/O 的瓶颈,线程数和连接数没有关系;
面向缓冲的、非阻塞;
它以块为基本单位处理数据。在 NIO 中,最为重要的两个组件是缓冲 Buffer 和通道 Channel。Channel 是一个双向通道,即可读,也可写。Stream 是单向的。

异步非阻塞 (AIO 方法,JDK7 发布)

使用 Buffer 读写数据一般遵循以下四个步骤:

1.写入数据到 Buffer;
2.调用 flip() 方法,从写模式切换到读模式;
3.从 Buffer 中读取数据;
4.调用 clear() 方法或者 compact() 方法,清空缓冲区。

原创粉丝点击