自我独立的类:RandomAccessFile

RandomAccessFile 适用于由大小已知的记录组成的文件,以便我们可以使用 seek()将
记录从一处转移到另一处,然后读取或者修改记录。文件中记录的大小不一定都相同,只要
我们能够确定那些记录有多大以及它们在文件中的位置即可。


最初,我们可能难以相信 RandomAccessFile 不是 InputStream 或者 OutputStream
继承层次结构中的一部分。除了实现了 DataInput 和 DataOutput 接口
(DataInputStream 和 DataOutputStream 也实现了这两个接口)之外,它和这两个继
承层次结构没有任何关联。它甚至不使用 InputStrean 和 OutputStream 类中已经存在
的任何功能。它是一个完全独立的类,从头开始编写其所有方法的类。这么做的原因是因为
 
RandomAccessFile 拥有和别的 I/O 类型本质不同的行为,因为我们可以在一个文件内向
前和向后移动。在任何情况下,它都是自我独立的,直接从 Object 衍生而来。


从本质上来说,RandomAccessFile 的工作方式类似于把 DataInputStream 和
DataOutStream 组合起来使用,其中方法 getFilePointer()用于查找当前所处的文件
位置,seek()用于在文件内移至新的位置, length()用于判断文件的最大尺寸。另外,
其构造器还需要第二参数(和 C 中的 fopen()相同)用来指示我们只是想随机读(“r”)
还是既读又写(“rw”)。它并不支持只写文件,这表明 RandomAccessFile 若是从
DataInputStrean 继承而来也可能会运行得很好。


只有 RandonAccessFile 支持搜寻方法,并且只适用于文件。BufferedInputStream 却
能允许标注(mark())位置(其值存储于内部某个简单变量内)和重新设定位置(reset
()),但这些功能很有限,不是非常有用。


在 JDK1.4 中,RandomAccessFile 的大多数功能但不是全部,由 nio 存储映射文件

(memory-mapped file)所取代,本章稍后会讲述。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值