java - Java 中的 File.length() 返回错误的长度

标签 java file unix

我有一个二进制文件。当我运行 ls -l 时,它有 12 个字节。但是,当我尝试使用 File.length 查找文件的长度时,结果仅为 9。这是我的文件的十六进制表示形式(从 xxd -p 获取):

2090887fffd0ffff437ffd0c 

这是代码

currentBytesRead = inputStream.read(buffer, bufferOffset, Math.min(1024, fileLength - bytesRead));

这是输入文件

https://www.dropbox.com/s/y508vsy8m2e8s9n/input.txt?dl=0

我使用的是 Ubuntu 14.04 64 位

最佳答案

由于 File.length() 几乎只是调用操作系统,因此不应发生这种差异。有几个可能的原因(从最明显的到更模糊的):

  • 您实际上正在读取同一个文件吗(打印绝对路径并在命令行上使用它)
  • 您是否已验证该文件是“正常”文件? IE。不是设备节点/符号链接(symbolic link)/...?
  • 您是否已验证该文件不是稀疏文件(即报告的大小小于内容)?然而,实际发布的内容使得这种情况不太可能发生。
  • JVM 是否在相同的安装点或 chroot 环境中运行?

关于java - Java 中的 File.length() 返回错误的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27016467/

相关文章:

java - 如何在 Netbeans 平台上获取项目类型?

java - Spring在资源中找不到文件

html - 在C中将字符串写入文件

javascript - 如何将输入文件对象序列化为 JSON?

linux - 从源代码构建软件比从包管理器安装它们有什么优势吗?

unix - 使用管道时的性能考虑 |在 awk 中

java - Robot.mouseMove 在 Mac OS X 中根本不起作用

java - 列表<?之间的区别扩展 MyClass> 和 List<MyClass>

unix - pstree 中进程周围的花括号是什么意思?

java - Android Studio SQLiteOpenHelper "DATABSE has no column named NAME"