RFR: 8272297: FileInputStream should override transferTo() for better performance
Brian Burkhalter
bpb at openjdk.java.net
Thu Aug 12 01:22:41 UTC 2021
On Thu, 12 Aug 2021 01:16:04 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`.
Invoking `transferTo()` on a `FileInputStream` will use the superclass method which copies using looping over buffers of a fixed size. If the parameter is a `FileOutputStream`, the copy is greatly accelerated by using the `java.nio.channels.FileChannel.transferTo()` method with the `FileChannel`s of the source and destination streams. Performance measurements were made for streams of length 100000, 1000000, 100000000, and 1000000000 bytes. Throughput improvement was observed for all cases on the three usual platforms, with the largest of nearly 5X being seen on Linux because in this case the sendfile() system call is used underneath. In no case did throughput decrease.
-------------
PR: https://git.openjdk.java.net/jdk/pull/5097
More information about the core-libs-dev
mailing list