返回介绍

10.5.2 输出流

发布于 2024-10-15 23:56:23 字数 1254 浏览 0 评论 0 收藏 0

两类主要的输出流是按它们写入数据的方式划分的:一种按人的习惯写入,另一种为了以后由一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文