SocketInputStream 和 InputStream 支持 Reset() 或 MarkSupported()

问题描述 投票:0回答:1

我正在尝试创建一个以

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

遇到这种情况我该如何处理

InputStream

java inputstream
1个回答
1
投票

显然,默认情况下

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

也就是说,您可以扩展

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

要做好这项工作是一项艰巨的任务,但您必须非常小心这里的记忆。

© www.soinside.com 2019 - 2024. All rights reserved.