V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mortonnex
V2EX  ›  问与答

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

  •  
  •   mortonnex · 2017-06-24 23:51:55 +08:00 · 1293 次点击
    这是一个创建于 2710 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请注意,是获取文件的大小
    5 条回复    2017-06-25 02:29:48 +08:00
    TtiGeR
        1
    TtiGeR  
       2017-06-25 00:07:53 +08:00 via iPhone
    misaka19000
        2
    misaka19000  
       2017-06-25 02:02:49 +08:00 via Android
    用 c 写过 native 方法然后 Java 调呗
    SoloCompany
        3
    SoloCompany  
       2017-06-25 02:10:41 +08:00
    想听一下楼主的高见,j2se 的 file.length 方法存在什么效率问题?以及有什么可以越过 jni 访问系统调用的方法?
    gogohigh
        5
    gogohigh  
       2017-06-25 02:29:48 +08:00   ❤️ 2
    unix 系统下的 HotSpot 实现有四种方式获取文件大小,
    File 的 length 是通用方法,底层直接调用 stat。
    FileChannel 的 size 使用 stat 或 ioctl。
    FileInputStream 的 channel size 和 URL 的 available 也能一次性获得 Integer.MAX_VALUE 字节以下文件的大小,底层也是 stat。
    底层调用都一样,当然直接调用的最快了。
    另外,多次读取时操作系统会使用缓存,要是想跑 benchmark,注意每次跑前清缓存。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:58 · PVG 02:58 · LAX 10:58 · JFK 13:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.