《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

相关文章
|
18天前
|
NoSQL Java 数据库连接
深入探索 Java 后台开发的核心技术
【4月更文挑战第5天】本文探讨了Java后台开发的关键技术,包括Spring框架与Spring Boot的使用,MyBatis和Hibernate的ORM选择,关系型与NoSQL数据库的适用场景,线程池与异步处理在并发中的作用,微服务架构及RESTful API设计。这些核心技术有助于开发者打造稳定、高性能的Java后台系统,适应不断发展的云计算和人工智能需求。
|
28天前
|
Java
有关Java发送邮件信息(支持附件、html文件模板发送)
有关Java发送邮件信息(支持附件、html文件模板发送)
26 1
|
1月前
|
Java
java中替换文件内容
java中替换文件内容
14 1
|
21天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
2天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
23 3
|
5天前
|
安全 Java API
java借助代理ip,解决访问api频繁导致ip被禁的问题
java借助代理ip,解决访问api频繁导致ip被禁的问题
|
7天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。
|
30天前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
92 3
|
1月前
|
Java
使用java将字符串写入到指定的文件中
使用java将字符串写入到指定的文件中
11 0
|
1月前
|
XML Java 数据格式
使用java解析XML文件的步骤
使用java解析XML文件的步骤
10 0

热门文章

最新文章