Java SocketInputStream和InputStream支持重置()或MarkSupported()
我正在尝试创建一个示例,它以Java SocketInputStream和InputStream支持重置()或MarkSupported(),java,core,Java,Core,我正在尝试创建一个示例,它以SocketInputStream的形式获取InputStream。它不受支持reset()和mark()。现在,一旦我处理了这个输入流,我就可以为其他操作再次处理它,因为它在eof时被关闭。 我想对InputStream使用这个过程,它允许reset()和markSupported() 在这种情况下如何处理InputStream。显然,默认情况下SocketInputStream不支持mark()和reset()。网络流不是可以重新定位的东西。没有任何东西存储已经读
SocketInputStream
的形式获取InputStream
。它不受支持reset()
和mark()
。现在,一旦我处理了这个输入流,我就可以为其他操作再次处理它,因为它在eof时被关闭。
我想对InputStream
使用这个过程,它允许reset()
和markSupported()
在这种情况下如何处理
InputStream
。显然,默认情况下SocketInputStream
不支持mark()
和reset()
。网络流不是可以重新定位的东西。没有任何东西存储已经读取的字节,因此流永远无法返回
也就是说,您可以扩展SocketInputStream
,并提供该功能。您需要重写SocketInputStream.read(byte b[],int off,int length)
方法,并将信息存储在ByteArrayOutputStream
或其他正在运行的byte[]
中。每当重新定位标记时,如果您位于内部数组的末尾,则只需要从字节[]
读取super.read(…)
然而,要想正确处理,这是一项很好的工作,您必须非常小心这里的内存。确保我遵循:您需要一种方法来处理所有
InputStream
实例,以便支持reset
和mark
(例如,使用包装器InputStream
)?您的问题与此处发现的问题类似吗?谢谢,我有这个想法,但我想不使用OutputStream但是谢谢你的建议。我试试看。