Java实现inputstream流的复制

获取到一个inputstream后,可能要多次利用它进行read的操作。由于流读过一次就不能再读了,而InputStream对象本身不能复制,而且它也没有实现Cloneable接口,所以得想点办法。

实现思路:

1、先把InputStream转化成ByteArrayOutputStream

2、后面要使用InputStream对象时,再从ByteArrayOutputStream转化回来
package com.test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class StreamOperateUtil {
public static void main(String[] args) throws FileNotFoundException {

 

复制代码
InputStream input =  new FileInputStream("c:\\test.txt"); 
    //InputStream input =  httpconn.getInputStream(); //这里可以写你获取到的流
    
    ByteArrayOutputStream baos = cloneInputStream(input);
    
    // 打开两个新的输入流  
    InputStream stream1 = new ByteArrayInputStream(baos.toByteArray());  
    InputStream stream2 = new ByteArrayInputStream(baos.toByteArray());
    
}

private static ByteArrayOutputStream cloneInputStream(InputStream input) {
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = input.read(buffer)) > -1) {
            baos.write(buffer, 0, len);
        }
        baos.flush();
        return baos;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}
复制代码

}

posted @   薛柏梁  阅读(3439)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示