java 标准输入流 关闭 打开,java-我可以关闭/重新打开InputStream来模拟不支持标记的输入流的标记/重置吗?...

我试图从流的顶部开始多次读取java.io.InputStream.

显然,对于返回true到markSupported()的流,我可以尝试使用mark(availableBytes),然后使用reset()从顶部再次读取流.

大多数流不支持mark,而那些流(例如java.io.BufferedInputStream)将数据复制到临时字节数组中,这在内存消耗方面并不理想.

如果我的方法接收到java.io.InputStream作为参数,可以关闭它,然后以某种方式重新打开它以将相同的原始流重置到顶部,以便我可以再次读取它吗?

除了将原始InputStream写入内存(y牛!)或临时文件之外,如果我需要再次从顶部读取流,我除了找到新的InputStream到那些临时位置之外,没有其他方法可以做到这一点.

解决方法:

您可以关闭它,但是在不创建数据的明确副本的情况下将同一流重新打开到同一数据的唯一方法是确定要处理的InputStream的具体类型(简单),该流的初始化指向什么(根据流类型及其接口的不同,可能是容易,困难或不可能的),然后添加代码以使用原始源输入实例化具体流类型的新实例(这并不困难,但也不太易于维护和容易如果有人创建了您不知道如何处理的自定义InputStream实现,则可能会损坏).

标签:bufferedinputstream,io,java-io,java,inputstream

来源: https://codeday.me/bug/20191208/2092101.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值