mortonnex
V2EX  ›  问与答

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

  •  
  •   mortonnex · Jun 24, 2017 · 1666 views
    This topic created in 3272 days ago, the information mentioned may be changed or developed.
    请注意,是获取文件的大小
    5 replies    2017-06-25 02:29:48 +08:00
    misaka19000
        2
    misaka19000  
       Jun 25, 2017 via Android
    用 c 写过 native 方法然后 Java 调呗
    SoloCompany
        3
    SoloCompany  
       Jun 25, 2017
    想听一下楼主的高见,j2se 的 file.length 方法存在什么效率问题?以及有什么可以越过 jni 访问系统调用的方法?
    gogohigh
        5
    gogohigh  
       Jun 25, 2017   ❤️ 2
    unix 系统下的 HotSpot 实现有四种方式获取文件大小,
    File 的 length 是通用方法,底层直接调用 stat。
    FileChannel 的 size 使用 stat 或 ioctl。
    FileInputStream 的 channel size 和 URL 的 available 也能一次性获得 Integer.MAX_VALUE 字节以下文件的大小,底层也是 stat。
    底层调用都一样,当然直接调用的最快了。
    另外,多次读取时操作系统会使用缓存,要是想跑 benchmark,注意每次跑前清缓存。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1026 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 18:54 · PVG 02:54 · LAX 11:54 · JFK 14:54
    ♥ Do have faith in what you're doing.