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
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.
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.
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()
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