Java | InputStream读取两次

一、重复读取InputStream流的方法

在 Java 中,通常情况下不建议对同一个InputStream对象直接使用两次,因为InputStream是一次性读取的流,读取一次后,流中的位置指针会移动到末尾,再次读取可能无法获取到预期的数据。

  • 但是如果确实需要使用同一个InputStream两次,可以采用以下方法:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class InputStreamTwiceExample {
    public static void main(String[] args) {
        
        try (InputStream inputStream = "你的输入流来源" ) {
            // 缓存文件流
            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
            byte[] data = new byte[1024];
            int nRead;
            while ((nRead = inputStream.read(data, 0, data.length))!= -1) {
                buffer.write(data, 0, nRead);
            }
            buffer.flush();

            // 第一次使用
            try(InputStream firstUse = new ByteArrayInputStream(buffer.toByteArray())){
                // 处理第一次使用的逻辑
            }

            // 第二次使用
            try(InputStream secondUse = new ByteArrayInputStream(buffer.toByteArray())){
                // 处理第二次使用的逻辑
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

二、后记

最近在处理两个项目附件同步的问题,涉及到InputStream的重复读取,最终用了以上解法。
上述解法能在文件流使用完后,自动关闭文件流。

要是文章对您有帮助,欢迎点赞、收藏、评论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值