Faster way of copying data in Java?

后端 未结 4 670
粉色の甜心
粉色の甜心 2021-02-06 17:00

I have been given a task of copying data from a server. I am using BufferedInputStream and output stream to copy the data and I am doing it byte by byte. Even thoug

相关标签:
4条回答
  • 2021-02-06 17:35

    Well since you're using a BufferedInputStream, you aren't reading byte by byte, but rather the size of the buffer. You could just try increasing the buffer size.

    0 讨论(0)
  • 2021-02-06 17:38

    Reading/writing byte-by-byte is definitely going to be slow, even though the actual reading/writing is done by chunks of the buffer size. One way to speed it up is to read/write by blocks. Have a look at read(byte[] b, int off, int len) method of BufferedInputStream. However it probably won't give you enough of the improvement.

    What would be much better is to use nio package (new IO) to copy data using nio channels. Have a look at nio documentation for more info.

    0 讨论(0)
  • 2021-02-06 17:39

    Here is a link to an excellent post explaining how to use nio channels to make copies of streams. It introduces a helper method ChannelTools.fastChannelCopy that lets you copy streams like this:

    final InputStream input = new FileInputStream(inputFile);
    final OutputStream output = new FileOutputStream(outputFile);
    final ReadableByteChannel inputChannel = Channels.newChannel(input);
    final WriteableByteChannel outputChannel = Channels.newChannel(output);
    ChannelTools.fastChannelCopy(inputChannel, outputChannel);
    inputChannel.close();
    outputChannel.close()
    
    0 讨论(0)
  • 2021-02-06 17:45

    I would suggest to use FileUtils from org.apache.commons.io. It has enough utility methods to perform file operations.

    org.apache.commons.io.FileUtils API Here

    0 讨论(0)
提交回复
热议问题