0

我正在尝试创建一个InputStreamSocketInputStream. 不支持reset()mark()。现在,一旦我处理了这个输入流,我就可以再次处理它以进行其他操作,因为它已关闭,在 eof 处到达。就像我想使用InputStream允许reset()markSupported().

InputStream在这种情况下我该如何处理。

4

1 回答 1

1

显然,默认情况下SocketInputStream不支持mark()and reset()。网络流不是您可以重新定位的东西。没有任何东西存储已经读取的字节,因此流永远不会返回。

也就是说,您可以扩展SocketInputStream并提供该功能。您将需要覆盖该SocketInputStream.read(byte b[], int off, int length)方法并将信息存储在 aByteArrayOutputStream或其他一些 running byte[]. 每当重新定位标记时,如果您位于内部数组的末尾,则需要从byte[]唯一发出的 a中读取。super.read(...)

但是,要做到正确是一项很好的工作,并且您必须非常小心这里的内存。

于 2012-09-28T22:22:07.173 回答