如何在Java中将输入流连接到输出流?

时间:2016-03-08 13:54:25

标签: java io inputstream outputstream

拥有InputStream和OutputStream。
我想连接它们。

我想要做的是从InputStream读取数据。
然后使用OutputStream输出相同的数据。
这是我的代码。

byte[] b = new byte[8192];
while((len = in.read(b, 0, 8192)) > 0){
    out.write(b, 0, len);
}

有没有方法可以连接它们?
或者有没有办法在没有缓冲区的情况下输入和输出数据?

3 个答案:

答案 0 :(得分:1)

输入和输出流都是被动对象,因此没有创建线程来将数据从一个复制到另一个,就无法连接它们。

注意:NIO有一个transferTo方法,虽然它的功能大致相同,效率更高。

您不必使用缓冲区,但如果没有缓冲区,它可能会很慢。

答案 1 :(得分:1)

Guava和Apache Commons有复制方法:

ByteStreams.copy(input, output);

IOUtils.copy(input ,output);

他们没有直接“连接”他们。为了达到我想要的目的,创建一个InputStream装饰器类,写入OutputStream所有被读取的内容。

答案 2 :(得分:-1)

您可以使用NIO频道/缓冲区

try (FileChannel in = new FileInputStream(inFile).getChannel();
     FileChannel out = new FileOutputStream(outFile).getChannel()) 
{
    ByteBuffer buff = ByteBuffer.allocate(8192);

    int len;
    while ((len = in.read(buff)) > 0) { 
        buff.flip();
        out.write(buff);
        buff.clear();
    }
}