java:IO-读写类的关系

目录
 
 

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

 


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值