拥有InputStream和OutputStream。
我想连接它们。
我想要做的是从InputStream读取数据。
然后使用OutputStream输出相同的数据。
这是我的代码。
byte[] b = new byte[8192];
while((len = in.read(b, 0, 8192)) > 0){
out.write(b, 0, len);
}
有没有方法可以连接它们?
或者有没有办法在没有缓冲区的情况下输入和输出数据?
答案 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();
}
}