RFR: 8272297: FileInputStream should override transferTo() for better performance [v2]
Alan Bateman
alanb at openjdk.java.net
Fri Aug 13 07:29:25 UTC 2021
On Thu, 12 Aug 2021 21:07:53 GMT, Brian Burkhalter <bpb at openjdk.org> wrote:
>> Please consider this request to add an override `java.io.FileInputStream.transferTo(OutputStream)` with improved performance if the parameter is a `FileOutputStream`.
>
> Brian Burkhalter has updated the pull request incrementally with one additional commit since the last revision:
>
> 8272297: Set source position after FC.transferTo(); add test
src/java.base/share/classes/java/io/FileInputStream.java line 364:
> 362: FileChannel fci = getChannel();
> 363: long pos = fci.position();
> 364: long count = fci.size() - pos;
It might be better to just specify the count as Long.MAX_VALUE and test the size after the transfer. This would be a bit more robust in the scenario that the file grows and would avoid fallback when the file is truncated, e.g.
FileChannel fc = getChannel();
long pos = fc.position();
long transferred = fc.transferTo(pos, Long.MAX_VALUE, out.getChannel());
long newPos = pos + transferred;
fc.position(newPos);
if (newPos >= fc.size()) {
return transferred;
}
-------------
PR: https://git.openjdk.java.net/jdk/pull/5097
More information about the core-libs-dev
mailing list