- 写在前面的话
- 引言
- 第 1 章 对象入门
- 第 2 章 一切都是对象
- 第 3 章 控制程序流程
- 第 4 章 初始化和清除
- 第 5 章 隐藏实施过程
- 第 6 章 类再生
- 第 7 章 多形性
- 第 8 章 对象的容纳
- 第 9 章 违例差错控制
- 第 10 章 Java IO 系统
- 第 11 章 运行期类型鉴定
- 第 12 章 传递和返回对象
- 第 十三 章 创建窗口和程序片
- 第 14 章 多线程
- 第 15 章 网络编程
- 第 16 章 设计范式
- 第 17 章 项目
- 附录 A 使用非 JAVA 代码
- 附录 B 对比 C++和 Java
- 附录 C Java 编程规则
- 附录 D 性能
- 附录 E 关于垃圾收集的一些话
- 附录 F 推荐读物
10.5.2 输出流
两类主要的输出流是按它们写入数据的方式划分的:一种按人的习惯写入,另一种为了以后由一个 DataInputStream 而写入。RandomAccessFile 是独立的,尽管它的数据格式兼容于 DataInputStream 和 DataOutputStream。
5. 保存与恢复数据
PrintStream 能格式化数据,使其能按我们的习惯阅读。但为了输出数据,以便由另一个数据流恢复,则需用一个 DataOutputStream 写入数据,并用一个 DataInputStream 恢复(获取)数据。当然,这些数据流可以是任何东西,但这里采用的是一个文件,并进行了缓冲处理,以加快读写速度。
注意字串是用 writeBytes() 写入的,而非 writeChars()。若使用后者,写入的就是 16 位 Unicode 字符。由于 DataInputStream 中没有补充的“readChars”方法,所以不得不用 readChar() 每次取出一个字符。所以对 ASCII 来说,更方便的做法是将字符作为字节写入,在后面跟随一个新行;然后再用 readLine() 将字符当作普通的 ASCII 行读回。
writeDouble() 将 double 数字保存到数据流中,并用补充的 readDouble() 恢复它。但为了保证任何读方法能够正常工作,必须知道数据项在流中的准确位置,因为既有可能将保存的 double 数据作为一个简单的字节序列读入,也有可能作为 char 或其他格式读入。所以必须要么为文件中的数据采用固定的格式,要么将额外的信息保存到文件中,以便正确判断数据的存放位置。
6. 读写随机访问文件
正如早先指出的那样,RandomAccessFile 与 IO 层次结构的剩余部分几乎是完全隔离的,尽管它也实现了 DataInput 和 DataOutput 接口。所以不可将其与 InputStream 及 OutputStream 子类的任何部分关联起来。尽管也许能将一个 ByteArrayInputStream 当作一个随机访问元素对待,但只能用 RandomAccessFile 打开一个文件。必须假定 RandomAccessFile 已得到了正确的缓冲,因为我们不能自行选择。
可以自行选择的是第二个构建器参数:可决定以“只读”(r)方式或“读写”(rw)方式打开一个 RandomAccessFile 文件。
使用 RandomAccessFile 的时候,类似于组合使用 DataInputStream 和 DataOutputStream(因为它实现了等同的接口)。除此以外,还可看到程序中使用了 seek(),以便在文件中到处移动,对某个值作出修改。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论