java - 如何使用 Java 计算此文件中的整数个数?
问题描述
如果我有一个.dat
要读取的给定文件,我如何计算 32 位整数的数量?我使用 2 种不同的方法得到 2 个不同的答案。
第一种方法:
int size = 0;
try (DataInputStream Input = new DataInputStream(
new BufferedInputStream(new FileInputStream(file.getFD())))){
while (true) {
file.skipBytes(4);
size += 1;
}
}catch(Exception ex){
System.out.println(ex);
}
System.out.println(size);
第二种方法:
File fileRead = new File(file);
ret = fileRead.length() / 4
第一种方法可能是最准确的,因为我每次读取 4 个字节并跳过它,以获得按顺序打包在文件中的整数的大小。但是,第二种方法只是给我直接文件大小并除以 4,这是不一样的。我认为它可能包括与内容无关的额外文件相关数据。
第一种方法很好,但是对于大文件来说效率很低。知道如何加快速度并有效地获得整数数量吗?
解决方案
如果您想多次了解是否可以从某个二进制文件中读取一个 32 位整数,方法 2 是肯定的答案。
DataInputStream
除非您确定文件是通过 a 写入的,否则不得通过 a 读取文件DataOutputStream
,因为这样它就不仅仅是一个普通的二进制文件:相反,它变成了一个Java 对象文件,其中包含大量开销数据,每个写的对象。
推荐阅读
- python - 如何将当前格式化时间从多个时区导出到文本文件
- reactjs - 错误“为路径 / 构建静态 HTML 失败” - gatsby, apollo
- android - 创建多页pdf
- python - gpg --list-keys 不显示任何结果,尽管密钥文件已经到位
- ios - UITabBar:没有出现顶行?
- mysql - 使用 LIMIT mysql 优化查询
- python - Python request.url 未返回浏览器中显示的完整 url
- terminal - Visual Studio Code:并非所有错误/警告消息都显示在终端窗口中
- java - Hashicorp Vault + GKE 上的“java.net.SocketTimeoutException:连接超时”
- java - S3 客户端未在 WebLogic 12c 上构建