RFR of 8132539: (fs) Files.lines(path).collect() returns wrong value in JDK 9 with certain files
chris.hegarty at oracle.com
Wed Aug 12 06:55:48 UTC 2015
Good sleuthing Brian. The change looks good.
> On 12 Aug 2015, at 02:14, Brian Burkhalter <brian.burkhalter at oracle.com> wrote:
> Please review at your convenience.
> Issue: https://bugs.openjdk.java.net/browse/JDK-8132539
> Patch: http://cr.openjdk.java.net/~bpb/8132539/webrev.00/
> As of JDK 9, Files.lines() attempts to use a FileChannelLinesSpliterator as a faster path to emit a Stream<String> than using BufferedReader.lines(). The FileChannelLinesSpliterator constructor requires a fence parameter which is derived from FileChannel.size(). For most files under the /proc directory on Linux, the size obtained from the fstat() function is zero  which means that FileChannel.size() will return zero. For such cases the FileChannelLinesSpliterator is created with a zero fence value hence emits a single empty String. The fix proposed in the above patch changes Files simply not to attempt to use the FileChannelLinesSpliterator if FileChannel.size() returns a non-positive value.
>  Notes section of http://linux.die.net/man/2/fstat.
More information about the nio-dev