Java IO
2012-10-26 00:58 coffeescript 阅读(260) 评论(0) 收藏 举报1.I/O数据流的分类方式有多种:
1.1按数据流动的方向,可分为输入流(Input Stream)和输出流(Output Stream).
输入流只能从中读取数据,而不能向其写入数据,输出流只能向其写出数据,而不能从中读取数据。
1.2.根据数据流所关联的是数据源还是其他数据流,可分为节点流(Node Stream)和处理流(Processing Stream)
节点流就是直接连接到数据源的I/O流,而处理流是对一个已存在的流的连接和封装。实现增强的数据读/写功能。eg.使用节点流FileReader关联到要读取的数据源文件,然后使用处理流BufferedReader封装/连接该节点流,以实现更有效的数据读取操作。
2.基础I/O流类型
2.1InputStream
InputStream是所有字节输入流类型的父类,该类中定义了以字节为单位读写数据的基本方法
2.2OutputStream
OutputStream是所有字节输出流类型的抽象父类
2.3Reader
Reader是所有字符输入流类型的父类,其中声明了有关用于读取字符流的有关方法。
2.4Writer
Writer是所有字符输出流类型的共同父类,也是一个抽象类,其中声明了用于写字符流的有关方法
3.常用I/O流类型
3.1FileInputStream/FileOutputStream
FileInputStream用于从本地磁盘文件中读取字节数据。一般用法是:先创建一个FileInputStream对象关联到要读取的文件,然后调用其read()方法读取字节数据到程序中。很明显,它不适合读取文本文件中的字符信息。
FileOutputStream用于将字节数据写出到文件中,和FileInputStream一样属于节点流,如果进行写操作的目标文件不存在,则自动创建该文件,如果目标文件所在的路径也不存在,则运行出错且不会自动新建目录.
3.2FileReader/FileWriter
FileReader用于以字符为单位读取文本文件,而FileWriter类用于将字符数据写出到文本文件中,两者均为节点流,FileReader读文件时自动将从文件中读取的字节信息解析/转换为字符,而FileWriter写文件事则相反,所以字符I/O流类型只能处理文本文件。
3.3BufferedReader/BufferedWriter
BufferedReader属于处理流,用于从其他的字符输入流中读取文本,它能将多个字符存入缓存以提供读字符、字符数组或行的有效方法。采用缓冲处理是为了提高效率,否则使用FileReader频繁读取效率低。
BufferedWriter提供字符的缓冲写出功能,当频繁执行字符写出操作时,可使用BufferedWriter对相关的字符输出流(FileWriter)进行封装以提高效率。
3.4InputStreamReader/OutputStreamWriter
InputStreamReader属于处理流,是从字节流到字符流的转换桥梁,用于封装其他的字节输入流并从中读取字节数据,然后将之按照特定的字符编码规则转换为字符,使用的字符编码可以在构造方法中显式指定或选择默认。为提高效率,通常将InputStream与BufferedReader封装在一起使用,使用BufferedReader封装InputStreamReader,进而读取InputStream中的数据是很普遍的做法。除了读取键盘输入的传统方法中使用了InputStreamReader外,一般不直接使用它,而是用其子类FileReader和FileWriter
OutputStreamWriter可按照特定的字符编码规则将字符转化为字节并写出到它所封装的字节输出流。为提高效率,通常把OutputStreamWriter封装在BufferedWriter中.
3.5PrintStream/PrintWriter
PrintStream在OutputStream基础之上提供了增强的功能,可以方便地输出各种类型数据而不仅限于byte型的格式化表示形式,System.out就是一个PrintStream类型的对象,既可作为节点流也可作为处理流,不抛出异常。
PrintWriter提供了PrintStream类中定义的所有打印方法,不抛出异常。
3.6DataInputStream/DataOutputStream
DataInputStream属于处理流,能够以一种与机器无关的方式,直接从底层字节输入流读取Java基本类型和String类型的数据。
DataOutputStream能够直接将Java基本类型数据写出其他的字节输出流,随后可以使用DataInputStream输入流读取这些数据。
DataInputStream/DataOutputStream传输数据时数据的格式是平台无关的,这一特性在跨平台的数据通信是非常有效的,使用Socket技术实现网络通信时会用到。
3.7CharArrayReader/CharArrayWriter
CharArrayReader可以将内存中的字符数组封装成数据源,并提供了以字符输入流的形式对其进行读取的功能。
CharArrayWriter实现了一个可当作Writer使用的字符输出缓冲区,可以向该字符输出流中写出数据,缓冲区的容量会随向流中写入数据而自动增长,初始容量可以在构造方法中指定或选择默认。
先总结到这儿,常用的已经加粗显示。
欢迎看客批评
浙公网安备 33010602011771号