Java 中有什么高效读取文件大小的方法

2017 年 6 月 24 日
 mortonnex
请注意,是获取文件的大小
1607 次点击
所在节点    问与答
5 条回复
TtiGeR
2017 年 6 月 25 日
misaka19000
2017 年 6 月 25 日
用 c 写过 native 方法然后 Java 调呗
SoloCompany
2017 年 6 月 25 日
想听一下楼主的高见,j2se 的 file.length 方法存在什么效率问题?以及有什么可以越过 jni 访问系统调用的方法?
xupefei
2017 年 6 月 25 日
gogohigh
2017 年 6 月 25 日
unix 系统下的 HotSpot 实现有四种方式获取文件大小,
File 的 length 是通用方法,底层直接调用 stat。
FileChannel 的 size 使用 stat 或 ioctl。
FileInputStream 的 channel size 和 URL 的 available 也能一次性获得 Integer.MAX_VALUE 字节以下文件的大小,底层也是 stat。
底层调用都一样,当然直接调用的最快了。
另外,多次读取时操作系统会使用缓存,要是想跑 benchmark,注意每次跑前清缓存。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370868

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX