NIO performance

John Hendrikx hjohn at xs4all.nl
Fri Sep 4 17:11:46 PDT 2009


I noticed that using a FileVisitor to iterate over a single directory is 
far faster than doing a DirectoryStream + readBasicFileAttributes 
combination.

Results for 9000 file directory:

Simple DirectoryStream iteration = 300 ms
DirectoryStream iteration + readBasicFileAttributes for each entry = 9000 ms
FileVisitor which skips all subdirectories (but does return 
BasicFileAttributes for each entry) = 480 ms

Using a FileVisitor to iterate over a single directory seems somewhat 
clumsy so I looked at the implementation to see if there was a better 
way, but I found that it is basically cheating (Path seems to be an 
instance of BasicFileAttributesHolder which obviously is a lot faster 
than doing your own Attributes.readBasicFileAttributes(path) call).

I guess what I'm saying is that I didn't really expect that -- I would 
have expected that for reading a single directory (+ attributes) there 
would be a simple way to do it like DirectoryStream currently provides.  
Currently, I think that many would fall for the trap of iterating over a 
DirectoryStream and calling readBasicFileAttributes on each entry which 
is very slow.  Of course now that I figured this out it is no real 
problem to just wrap a FileVisitor in my own class to read a single 
directory.

I hope this feedback is useful.


More information about the nio-dev mailing list