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

2017-06-24 23:51:55 +08:00
 mortonnex
请注意,是获取文件的大小
1232 次点击
所在节点    问与答
5 条回复
TtiGeR
2017-06-25 00:07:53 +08:00
misaka19000
2017-06-25 02:02:49 +08:00
用 c 写过 native 方法然后 Java 调呗
SoloCompany
2017-06-25 02:10:41 +08:00
想听一下楼主的高见,j2se 的 file.length 方法存在什么效率问题?以及有什么可以越过 jni 访问系统调用的方法?
xupefei
2017-06-25 02:26:34 +08:00
gogohigh
2017-06-25 02:29:48 +08:00
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