2011-04-13 37 views
3

我试图从流顶部开始多次读取java.io.InputStream我可以关闭/重新打开InputStream以模拟不支持标记的输入流的标记/重置吗?

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

大部分流的不支持标记和那些(例如java.io.BufferedInputStream)将数据复制到临时字节排列构成的非内存消耗的术语漂亮等

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

我找不到任何方式从原来写入到InputStream内存除了做这一招(牦牛!)或临时文件,并比打开新InputStream那些临时地点,如果我需要再次读取从顶部流。

回答

3

您可以关闭它,但重新打开同一个数据流到同一个数据而不在某处创建数据的显式副本的唯一方法是确定您正在处理的哪个具体类型的InputStream(简单),该数据流被初始化指向(可能很容易,很难或不可能取决于流类型和它的接口),然后添加代码以实例化具有原始源输入的具体流类型的新实例(不难,但也不如果有人创建了一个你不知道如何处理的自定义InputStream实现,那么它非常易于维护且易于破坏)。

+0

你说得对,这对于'InputStream'来说不是微不足道的。然而,我意识到我实际上正在处理具有可用于标记/重置的API的ImageInputStream。 – parxier 2011-04-13 23:05:49

相关问题