Java IO类

Java IO类分类:

按流向分:  
输入流: 程序可以从中读取数据的流。  
输出流: 程序能向其中写入数据的流。
  
按数据传输单位分:  
字节流: 以字节为单位传输数据的流
字符流: 以字符为单位传输数据的流
  
按功能分:  
节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。
过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或输出流连接创建的。

InputStream和Reader是所有输入流的基类,OutputStream和Writer是所有输出流的基类。他们都是抽象类,本身并不能创建实例来执行输入,但他们有输入/输出流的模版,所以它们的方法是所有的输入/输出流可以用的方法。

从Stream到Reader,Writer的转换类:InputStreamReader, OutputStreamWriter

BufferedReader(FileReader(String)), BufferedReader(InputStreamReader(FileInputStream(String)))

简单来讲,要有BufferedReader,先要有Reader,这个Reader可以直接来自FileReader,也可以从InputStream转化而来,这个时候就需要InputStreamReader做桥梁。

InputStreamReader和FileReader处于同一层,读写方法差不多。

基本的流类:

(1)FileInputStream和FileOutputStream
节点流,用于从文件中读取或往文件中写入字节流。如果在构造FileOutputStream时,文件已经存在,则覆盖这个文件。

(2)BufferedInputStream和BufferedOutputStream
过滤流,需要使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率。

(3)DataInputStream和DataOutputStream
过滤流,需要使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。

(4)PipedInputStream和PipedOutputStream
管道流,用于线程间的通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。

在InputStream里常用的方法:

int read(): 从输入流中读取单个字节
int read(byte[] b): 从输入流中读取最多b.length个字节,将读取的字节存在数组b中,返回实际读取的字节数
int read(byte[] b, int off, int len): 从输入流中读取最多len个字节数据,并将其存储在数字b中,放入b数组中时,并不是从数组起点开始,而是从off位置开始,返回实际读取字节数。

在Reader里经常使用的方法:

int read(): 从输入流中读取单个字符
int read(char[] c): 从输入流读取最多c.length个字符数据,并将其存储在字符数组c中,返回实际读取的字符
int read(char[] c, int off, int len): 从输入流中读取最多len个字符的数据,将读取的数据放到字符数组c中保存,从数组的off开始读取。

6 days ago, this page was being read.

,

Subscribe to Comments