我需要确定一个非常大的字符编码文件的大小。读取文件需要大量的时间。
我的理解是,当文件第一次创建/修改时,大小会被缓存,因此当文件管理器请求大小时,操作系统可以快速检索该值。(例如,在win资源管理器中打开一个大文件的属性对话框似乎很快)
假设上述情况属实,那么在Java中可以检索到吗?我原以为length()会读取文件来确定size...or,它是否真的获得了这个缓存大小?还是在创建File对象时读取/检索缓存大小?
到目前为止,我自己的研究还不能回答这些问题。
如果你能帮我理解一下我会很感激
谢谢
发布于 2011-05-04 21:32:36
文件系统通常将长度存储为文件描述的一部分。这样,操作系统就知道文件的结尾在哪里。此信息在被访问时被缓存。并且对此信息的重复调用也将被缓存。
注意:操作系统通常会从磁盘读取比您要求的更多的数据。这是因为访问磁盘比较昂贵,而内存相对较便宜。例如,当你得到一个文件的长度时,它可能会读取许多文件的细节,假设你可能也想要关于这些文件的信息。例如,当你第一次获得一个文件的信息时,它很可能已经被缓存了。
发布于 2011-05-04 21:22:38
getLength()委托底层的本机操作系统函数获取文件的长度。使用这个应该没问题。
发布于 2011-05-04 21:23:18
length()方法不读取文件。它调用一个本机方法,该方法委托操作系统获取文件长度。它的响应时间不应该依赖于实际的文件长度。
https://stackoverflow.com/questions/5884035
复制相似问题