Java实现流的复制ByteArrayOutputStream,解决流不可重⽤问题
背景介绍
在使⽤Java进⾏流操作的过程中,会出现需要重复使⽤流的情况,⽐如我利⽤sftp服务器下载⽂件需要把⽂件复制到其他的⽂件夹内,然⽽下载⽂件的流不能直接⽤于上传使⽤,但是InputStream接⼝并未实现cloneable接⼝,因此不能实现复制,这是就要⽤到把流转换为另外⼀种形式,然后存⼊内存之中,并再次转化为流。
public class CopyStream {
public static void main(String[] args) throws IOException {
File file = new File("E:\\03PCQQ⽂件\\Web应⽤安全规范 (2).doc");
InputStream input = new FileInputStream(file);
ByteArrayOutputStream baos = copyInputStream(input);
// 复制出两个新的输⼊流(此时有⼀个InputStream的到两个相同的inputStream,如果需要多个还可以继续复制)
InputStream codeStream = new ByteArray());
InputStream opStream = new ByteArray());
}
/**
* 流复制
*/
private static ByteArrayOutputStream copyInputStream(InputStream input) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 定义⼀个缓存数组,临时存放读取的数组
//经过测试,4*1024是⼀个⾮常不错的数字,过⼤过⼩都会⽐较影响性能
byte[] buffer = new byte[4096];
int length;
while ((length= ad(buffer)) > -1) {
baos.write(buffer, 0, length);
}
baos.flush();
return baos;
} catch (IOException e) {
java streamthrow new IOException(e);
}
}
}
以上即实现了流的复制,可以再次使⽤这个流了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。