我需要确定一个非常大的字符编码文件的大小。读取文件需要花费大量时间。
我的理解是,当首次创建/修改文件时,会缓存大小,因此操作系统可以在请求大小(例如文件管理器)时快速检索该值。 (例如,在win explorer中打开大文件的属性对话框时似乎很快)
假设上述情况属实,可以用Java检索吗?我原以为length()读取文件来确定大小......或者它实际上是否获得了这个缓存大小?或者,File对象的创建是否会读取/检索缓存的大小?
我自己的研究尚未能回答这些问题。
我很感激我的理解帮助
由于
答案 0 :(得分:5)
getLength()委托底层本机操作系统函数获取文件的长度。你可以使用它。
答案 1 :(得分:5)
文件系统通常将长度存储为文件描述的一部分。这样OS就知道文件末尾的位置。访问时会缓存此信息。并且重复调用此信息也将被缓存。
注意:操作系统通常会从磁盘读取的数据超出您的要求。这是因为访问磁盘很昂贵而且内存相对便宜。例如当你获得一个文件的长度时,它可能会读取许多文件的详细信息,假设您可能也需要有关这些文件的信息。即,当您第一次获得文件信息时,它可能已经被缓存。
答案 2 :(得分:3)
length()方法不读取文件。它调用一个本机方法,该方法委托给OS来获取文件长度。其响应时间不应取决于实际文件长度。
答案 3 :(得分:2)
我认为你在想这个。长度应查询文件系统并快速计算出来。它肯定不会读取整个文件,并计算字节数。