如何使Java中的InputStream的深层复制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使Java中的InputStream的深层复制相关的知识,希望对你有一定的参考价值。
InputStream的是抽象的,不公开(没有尽自己的孩子)的内部数据对象。所以唯一的办法,以“深拷贝”InputStream的是创造ByteArrayOutputStream后执行Read()上的InputStream,写(),该数据ByteArrayOutputStream。然后做: 方通=新ByteArrayInputStream的(byteArrayOutputStream.toArray());如果您使用的是标记()您的InputStream那么你的确不能扭转这一点。这使你流“消费”。
要“重用”你的InputStream避免使用标记(),然后在阅读呼叫复位结束()。您会然后读取来自流的开头。
编辑:
顺便说一句,IOUtils使用这个简单的code片段复制的InputStream:
公共静态INT副本(输入的InputStream,OutputStream的输出)抛出IOException异常
byte []的缓冲区=新的字节[DEFAULT_BUFFER_SIZE]
诠释计数= 0;
INT N = 0;
而(-1!=(N = input.read(缓冲液)))
output.write(缓冲液,0,n)的;
数+ = N;
返回计数;
参考技术A 我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快
以上是关于如何使Java中的InputStream的深层复制的主要内容,如果未能解决你的问题,请参考以下文章
Java如何从InputStream中读取收入大小? [复制]
如何在 Java 中将字符串读入 inputStream? [复制]
如何在 Java 中制作 ArrayList<Integer> 的深层副本? [复制]
在 Java 中,如何将 InputStream 转换为字节数组 (byte[])? [复制]