目录
Reader
用于读取字符流的抽象类。
Reader
——
BufferedReader
——
InputStreamReader
——
FileReader
----BufferedReader
从字符输入流中读取文本
,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,
Reader
所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,
建议用
BufferedReader
包装所有其
read()
操作可能开销很高的
Reader
(如
FileReader
和
InputStreamReader
)。例如,
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用
read()
或
readLine()
都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
----InputStreamReader
InputStreamReader 是
字节流通向字符流的桥梁
,这里可以指定编码方式,如:
new
InputStreamReader(
new
FileInputStream(f1),
"GB2312"
)
每次调用
InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。
为了达到最高效率,可要考虑在
BufferedReader 内包装 InputStreamReader。例如:
BufferedReader in =
new BufferedReader(new
InputStreamReader(System.in));
--------FileReader
用来
读取字符文件
的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在
FileInputStream 上构造一个 InputStreamReader。
FileReader
用于读取字符流。要读取原始字节流,请考虑使用
FileInputStream
。
Writer
写入字符流的抽象类。
Writer
——
BufferedWriter
——
InputStreamWriter
——
FileWriter
InputStream
此抽象类是表示字节输入流的所有类的超类
InputStream
——
FileInputStream
——
FilterInputStream
——
BufferedInputStream
----FileInputStream
FileInputStream
从文件系统中的某个
文件中获得输入字节
。哪些文件可用取决于主机环境。
FileInputStream
用于
读取诸如图像数据之类的原始字节流
。要读取字符流,请考虑使用
FileReader
。
--------BufferedInputStream
BufferedInputStream
为另一个输入流添加一些功能,即缓冲输入以及支持
mark
和
reset
方法的能力。在创建
BufferedInputStream
时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。
mark
操作记录输入流中的某个点,
reset
操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次
mark
操作后读取的所有字节。
OutputStream
此抽象类是表示输出字节流的所有类的超类。
OutputStream
——
FileOutputStream
——
FilterOutputStream
——
BufferedOutputStream
RandomAccessFile
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型
byte 数组。存在指向该隐含数组的光标或索引,称为
文件指针
;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取
/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过
getFilePointer
方法读取,并通过
seek
方法设置。
通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出
EOFException
(是一种
IOException
)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出
IOException
,而不是
EOFException
。需要特别指出的是,如果流已被关闭,则可能抛出
IOException
。