《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.3.2 随机访问文件

简介: 本节书摘来华章计算机《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一书中的第2章 ,第2.3.2节,[美] 凯S.霍斯特曼(Cay S. Horstmann) 著陈昊鹏 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.3.2 随机访问文件

RandomAccessFile类可以在文件中的任何位置查找或写入数据。磁盘文件都是随机访问的,但是与网络套接字通信的输入/输出流却不是。你可以打开一个随机访问文件,只用于读入或者同时用于读写,你可以通过使用字符串“r”(用于读入访问)或“rw”(用于读入/写出访问)作为构造器的第二个参数来指定这个选项。
image

当你将已有文件作为RandomAccessFile打开时,这个文件并不会被删除。
随机访问文件有一个表示下一个将被读入或写出的字节所处位置的文件指针,seek方法可以用来将这个文件指针设置到文件中的任意字节位置,seek的参数是一个long类型的整数,它的值位于0到文件按照字节来度量的长度之间。
getFilePointer方法将返回文件指针的当前位置。
RandomAccessFile类同时实现了DataInput和DataOutput接口。为了读写随机访问文件,可以使用在前面小节中讨论过的诸如readInt/writeInt和readChar/writeChar之类的方法。
我们现在要剖析一个将雇员记录存储到随机访问文件中的示例程序,其中每条记录都拥有相同的大小,这样我们可以很容易地读入任何记录。假设你希望将文件指针置于第三条记录处,那么你只需将文件指针置于恰当的字节位置,然后就可以开始读入了。
image

整数和浮点值在二进制格式中都具有固定的尺寸,但是在处理字符串时就有些麻烦了,因此我们提供了两个助手方法来读写具有固定尺寸的字符串。
writeFixedString写出从字符串开头开始的指定数量的码元(如果码元过少,该方法将用0值来补齐字符串)。
image
readFixedString方法从输入流中读入字符,直至读入size个码元,或者直至遇到具有0值的字符值,然后跳过输入字段中剩余的0值。为了提高效率,这个方法使用了StringBuilder类来读入字符串。
image
image

我们将writeFixedString和readFixedString方法放到了DataIO助手类的内部。
为了写出一条固定尺寸的记录,我们直接以二进制方式写出所有的字段:
image

让我们来计算每条记录的大小:我们将使用40个字符来表示姓名字符串,因此,每条记录包含100个字节:

  • 40字符 = 80 字节,用于姓名。
  • 1 double = 8 字节,用于薪水。
  • 3 int = 12字节,用于日期。

程序清单2-2中所示的程序将三条记录写到了一个数据文件中,然后以逆序将它们从文件中读回。为了高效地执行,这里需要使用随机访问,因为我们需要首先读入第三条记录。
程序清单2-2 randomAccess/RandomAccessTest.java
image
image
image
image

image

相关文章
|
21天前
|
安全 Java API
JDK 11中的动态类文件常量:探索Java字节码的灵活性与动态性
在JDK 11中,Java语言引入了一个新的特性,允许在运行时动态地修改类文件常量。这一特性为Java开发者提供了更大的灵活性,使他们能够根据需要在运行时更改类文件中的常量值。本文将深入探讨动态类文件常量的工作原理、优点、限制以及在实际项目中的应用。
31 11
|
1月前
|
开发框架 Java API
最新Java基础系列课程--Day13-高级特性(二)
最新Java基础系列课程--Day13-高级特性
|
3天前
|
存储 Java Unix
【JavaEE初阶】 认识文件与Java中操作文件
【JavaEE初阶】 认识文件与Java中操作文件
|
27天前
|
Java PHP
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
|
27天前
|
监控 Java Linux
java配置OOM时保存堆转储文件
java配置OOM时保存堆转储文件
20 0
|
1月前
|
JavaScript 小程序 Java
基于Java+SpringBoot+Vue的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文件、统计图展示)
基于Java+SpringBoot+Vue的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文件、统计图展示)
36 0
基于Java+SpringBoot+Vue的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文件、统计图展示)
|
1月前
|
Java 程序员 API
最新Java基础系列课程--Day13-高级特性(三)
最新Java基础系列课程--Day13-高级特性
|
1月前
|
开发框架 Java 程序员
最新Java基础系列课程--Day13-高级特性(一)
最新Java基础系列课程--Day13-高级特性
|
1月前
|
XML Java 数据格式
|
1月前
|
Java
java读取txt文件,使用逗号,分号,空格,回车将文件内容分割成一个一个的词组,找出所有重复的词组
java读取txt文件,使用逗号,分号,空格,回车将文件内容分割成一个一个的词组,找出所有重复的词组
74 38