【问题标题】:File size caching & efficient retrieval of file sizes in JavaJava 中文件大小缓存和文件大小的有效检索
【发布时间】:2011-05-04 13:17:28
【问题描述】:

我需要确定一个非常大的字符编码文件的大小。读取文件需要大量时间。

我的理解是,当第一次创建/修改文件时,会缓存大小,因此操作系统可以在文件管理器请求大小时快速检索该值。 (例如,在 win 资源管理器中打开大文件的属性对话框时似乎很快)

假设以上是真的,这可以在 Java 中检索吗?我曾认为length() 读取文件以确定大小......或者它实际上是否获得了这个缓存大小?或者文件对象的创建是否会读取/检索缓存的大小?

我自己的研究还不能回答这些问题。

感谢您对我的理解的帮助

谢谢

【问题讨论】:

标签: java file filesize


【解决方案1】:

文件系统通常将长度存储为文件描述的一部分。这样操作系统就知道文件的结尾在哪里。此信息在访问时被缓存。并且对这些信息的重复调用也会被缓存。

注意:操作系统从磁盘读取的数据通常比您要求的要多。这是因为访问磁盘很昂贵,而内存相对便宜。例如当您获得一个文件的长度时,它可能会读取许多文件的详细信息,前提是您可能也需要有关这些文件的信息。即第一次获得文件信息时,它可能已经被缓存了。

【讨论】:

    【解决方案2】:

    getLength() 委托底层本机操作系统函数来获取文件的长度。用这个应该没问题。

    【讨论】:

      【解决方案3】:

      length() 方法不读取文件。它调用委托给操作系统以获取文件长度的本机方法。它的响应时间不应取决于实际的文件长度。

      【讨论】:

        【解决方案4】:

        我想你想多了。长度应该查询文件系统并很快弄清楚。它肯定不是读取整个文件,而是计算字节数。

        【讨论】:

          猜你喜欢
          • 2013-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-14
          相关资源
          最近更新 更多