java - 支持 Reset() 或 MarkSupported() 的 SocketInputStream 和 InputStream

标签 java core

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

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

最佳答案

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

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

然而,要正确完成这项工作是一项艰巨的工作,并且您必须非常小心这里的内存。

关于java - 支持 Reset() 或 MarkSupported() 的 SocketInputStream 和 InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12647183/

相关文章:

java - 循环中 java.util.Map.putAll(Map<>) 和 java.util.Map.put(Integer, Object) 有什么区别

clojure future vs 延迟

.net - 将GCP凭据添加到.net核心应用程序中的Docker

java - JScrollPane 沿底部和右边缘添加一个白色像素

java - 如何使 ImageButton 随机放置在线性布局中? (安卓)

Java泛型语法

java - 在 Spring MVC 中更正 JavaScript 文件中的 URL

database-connection - 如何在 Entity Framework Core 中检查与数据库的连接?

java - 在 Java 中,捕获一般异常和特定异常(例如 IOException?)之间有什么区别?

c - 生成的 RPC 核心