将输出流的输出管道输出到输入流

时间:2014-08-18 03:39:08

标签: java sockets piping

我的问题是从一个插座到另一个插座的输入管道。目前,我正在使用此代码:

                    for(;;)
                    {
                        try
                        {
                            output2.write(input1.read());
                        }
                        catch(Exception err)
                        {
                            err.printStackTrace();
                        }
                    }

即使这在技术上有效,但还有更快的方法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Google Guava中的ByteStreams#copy(InputStream, OutputStream)

try {
    ByteStreams.copy(input1, output2);
} catch (IOException x) {
    x.printStackTrace();
}

答案 1 :(得分:0)

不使用任何外部库,并且不知道你有一个OutputStream和一个InputStream,你可以使用这样的东西。

byte[] buf = new byte[ 1024 ];
int read = 0;
while( ( read = in.read( buf ) ) != -1 ) {
    out.write( buf, 0, read );
}

这为您提供了块移动的好处,而不是像您发布的代码中那样单字节移动。

如果我们有关于您正在使用的IO流类型的更多信息,可以改进这一点。您可以查看Java.NIO,它可以在文件或套接字的情况下提供更快的块移动。