Connecting an input stream to an outputstream Connecting an input stream to an outputstream java java

Connecting an input stream to an outputstream


Just because you use a buffer doesn't mean the stream has to fill that buffer. In other words, this should be okay:

public static void copyStream(InputStream input, OutputStream output)    throws IOException{    byte[] buffer = new byte[1024]; // Adjust if you want    int bytesRead;    while ((bytesRead = input.read(buffer)) != -1)    {        output.write(buffer, 0, bytesRead);    }}

That should work fine - basically the read call will block until there's some data available, but it won't wait until it's all available to fill the buffer. (I suppose it could, and I believe FileInputStream usually will fill the buffer, but a stream attached to a socket is more likely to give you the data immediately.)

I think it's worth at least trying this simple solution first.


How about just using

void feedInputToOutput(InputStream in, OutputStream out) {   IOUtils.copy(in, out);}

and be done with it?

from jakarta apache commons i/o library which is used by a huge amount of projects already so you probably already have the jar in your classpath already.


For completeness, guava also has a handy utility for this

ByteStreams.copy(input, output);