我正在尝试创建一个以InputStream形式获取SocketInputStream的示例。不支持reset()mark()。现在,一旦我处理了这个输入流,就可以再次处理它以进行其他操作,因为它在eof时已关闭。
就像我想对InputStream使用此过程,允许reset()markSupported()

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

最佳答案

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

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

但是,这是一项很好的工作,您将必须非常注意此处的内存。

10-01 09:15