我正在尝试创建一个InputStream
以SocketInputStream
. 不支持reset()
和mark()
。现在,一旦我处理了这个输入流,我就可以再次处理它以进行其他操作,因为它已关闭,在 eof 处到达。就像我想使用InputStream
允许reset()
和markSupported()
.
InputStream
在这种情况下我该如何处理。
显然,默认情况下SocketInputStream
不支持mark()
and reset()
。网络流不是您可以重新定位的东西。没有任何东西存储已经读取的字节,因此流永远不会返回。
也就是说,您可以扩展SocketInputStream
并提供该功能。您将需要覆盖该SocketInputStream.read(byte b[], int off, int length)
方法并将信息存储在 aByteArrayOutputStream
或其他一些 running byte[]
. 每当重新定位标记时,如果您位于内部数组的末尾,则需要从byte[]
唯一发出的 a中读取。super.read(...)
但是,要做到正确是一项很好的工作,并且您必须非常小心这里的内存。