我正在尝试创建一个以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(...)
中读取。
但是,这是一项很好的工作,您将必须非常注意此处的内存。