RFR(JDK12/NIO) 8202285: (fs) Add a method to Files for comparing file contents

Joe Wang huizhe.wang at oracle.com
Thu Sep 20 18:06:03 UTC 2018


Hi Daniel,

You're right, line 115 is not needed. I'll add a couple of test cases to 
cover the route.

Best,
Joe

On 9/20/18, 2:36 AM, Daniel Fuchs wrote:
> Hi Joe,
>
> The spec reads very well to me.
>
> On the implementation side:
>
>  114             } else if (nRead1 != nRead2) {
>  115                 int len = Math.min(nRead1, nRead2);
>  116                 // there's always a mismatch when nRead1 != nRead2
>  117                 return totalRead +
>  118                     Arrays.mismatch(buffer1, 0, len, buffer2, 0, 
> len);
>
> I believe line 115 is not needed, and line 118 should be:
>
>     Arrays.mismatch(buffer1, 0, nRead1, buffer2, 0, nRead2);
>
> otherwise - if I'm not mistaken - there's the chance that
>
>     Arrays.mismatch(buffer1, 0, len, buffer2, 0, len);
>
> will return -1. Or am I missing something?
>
> If I'm right then your test is probably missing a case
> to explicitely test for that. Alternatively you could add a whitebox
> test to test FilesMismatch.mismatch(InputStream, InputStream)
> directly.
>
> best regards,
>
> -- daniel
>
>
> On 19/09/2018 19:48, Joe Wang wrote:
>> Hi,
>>
>> After much discussion and 10 iterations of reviews, this proposal has 
>> evolved from what was the original isSameContent method to a mismatch 
>> method. API-wise, a compare method was also considered as it looked 
>> like just a short step forward from mismatch, however, it was 
>> eventually dropped since there is no convincing use case comparing 
>> files lexicographically by contents. Impl-wise, extensive performance 
>> benchmarking has been done to compare a buffered reading vs memory 
>> mapping, the result was that a simple buffered reading performed 
>> better among small files, and those with the mismatched byte closer 
>> to the beginning of files. Since the proposed method's targeted files 
>> are small ones, the impl currently does a buffered reading only.
>>
>> Please review.
>>
>> JBS: https://bugs.openjdk.java.net/browse/JDK-8202285
>>
>> specdiff: 
>> http://cr.openjdk.java.net/~joehw/jdk12/8202285/specdiff/java/nio/file/Files.html 
>>
>>
>> webrev: http://cr.openjdk.java.net/~joehw/jdk12/8202285/webrev/
>>
>> Thanks,
>> Joe
>>
>


More information about the core-libs-dev mailing list