把一个ByteArrayInputStream复制给另一个ByteArrayInputStream,对第二个ByteArrayInputStream读取不影响第一个,该怎么写代码
时间: 2024-09-28 11:16:52 浏览: 32
在Java中,你可以通过`java.nio`包下的`ByteBuffer`和`copy()`方法来实现这种独立读取的需求,因为`ByteBuffer`可以提供安全的内存区域拷贝。这里是一个例子:
```java
import java.io.ByteArrayInputStream;
import java.nio.ByteBuffer;
public class Main {
public static void main(String[] args) throws Exception {
// 创建原始的ByteArrayInputStream
ByteArrayInputStream inputStreamOriginal = new ByteArrayInputStream("Hello, World!".getBytes());
// 使用ByteBuffer创建一个新的流,并设置其容量等于原始流的大小
ByteBuffer byteBuffer = ByteBuffer.allocate(inputStreamOriginal.available());
byteBuffer.put(inputStreamOriginal);
// 将ByteBuffer转换回ByteArrayInputStream
ByteArrayInputStream inputStreamCopy = new ByteArrayInputStream(byteBuffer.array());
// 独立地从两个输入流中读取
int read1 = inputStreamOriginal.read(); // 不影响原流
int read2 = inputStreamCopy.read(); // 也不会影响副本
System.out.println("Read from original: " + (char)read1);
System.out.println("Read from copy: " + (char)read2);
// 关闭流以释放资源
inputStreamOriginal.close();
inputStreamCopy.close();
}
}
```
在这个例子中,我们首先获取了原始流的可用字节数,然后分配了一个同样大小的缓冲区,将原始流的内容复制到缓冲区,最后将缓冲区转换回新的ByteArrayInputStream。这样,即使同时读取两个流,它们的数据是独立分开的。
阅读全文