我有一个二进制文件。当我运行 ls -l 时,它有 12 个字节。但是,当我尝试使用 File.length 查找文件的长度时,结果仅为 9。这是我的文件的十六进制表示形式(从 xxd -p 获取):
2090887fffd0ffff437ffd0c
这是代码
currentBytesRead = inputStream.read(buffer, bufferOffset, Math.min(1024, fileLength - bytesRead));
这是输入文件
我使用的是 Ubuntu 14.04 64 位
最佳答案
由于 File.length()
几乎只是调用操作系统,因此不应发生这种差异。有几个可能的原因(从最明显的到更模糊的):
- 您实际上正在读取同一个文件吗(打印绝对路径并在命令行上使用它)
- 您是否已验证该文件是“正常”文件? IE。不是设备节点/符号链接(symbolic link)/...?
- 您是否已验证该文件不是稀疏文件(即报告的大小小于内容)?然而,实际发布的内容使得这种情况不太可能发生。
- JVM 是否在相同的安装点或 chroot 环境中运行?
关于java - Java 中的 File.length() 返回错误的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27016467/