java - 有什么方法可以清除 Java 中 DataInputStream 的数据? (一个安卓应用程序)

标签 java android

更新:

与此问题相关的项目自从分享此帖子后发生了很大变化,实际上我强烈建议避免使用 TCP 套接字传输图像,因为它会使传输速度变慢。我解决了通过 UDP 传输图像并将它们从 YUV 压缩为 JPG 而不是使用 RGB 的问题。这使得传输和重建图像的工作变得更加容易,因为您不必处理图像的每一层。

要知道图像的大小,我只是简单地将此信息添加到 UDP 数据包的第一个字节,因此如果未正确接收到该大小,套接字超时将丢弃该数据包,并且在接收时通信仍然有效下一个 UDP 数据包。

由于这不是原始问题的答案,所以我将其保留为未回答,以便有相同问题的其他人可以找到解决方案并将其发布在这里。

------------------------ 原帖:-------------------- ------

首先感谢您的帮助并为我的英语道歉,我来自西类牙。

我正在使用套接字通过 TCP 从计算机接收图像。对于每张图像,我得到层数 (RGB)、每一层的行和列,然后是每个像素的值。为了收集数据,我使用了 DataInputStream

通常它工作正常,但有时我得到错误的行数和列数值,导致下一个函数出现问题,即应用程序卡住等待永远不会发送的数据,或者只是导致数组上的索引错误保存数据。

所以如果行数和列数太多,我想清除数据,但是我找不到任何方法来清除充满错误字节的像素值的DataInputStream

此外,我不知道DataInputStream的大小,因为大小是按以下方式计算的:Layers * Width * height。所以如果我没有得到这个阵营的真正值(value),我就不知道我必须跳过多少字节。

问题:

  1. 有人知道清除 DataInputStream 的方法吗?

  2. 如果不是,我应该使用另一种类型的输入方式吗? BufferedInputStream?

最佳答案

我怀疑您的问题并不是真正关于清除输入流,而是更多关于在不同步后找回。一种常见的方法是使用 boundary-pattern (用于多部分 html 文档和 mjpeg 流)。因此,如果您在流程中迷路了,您会继续搜索此模式,直到找到为止。

如果你真的想跳过字节,你可以使用DataInputStream.skipBytes(int n)方法。

关于java - 有什么方法可以清除 Java 中 DataInputStream 的数据? (一个安卓应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11029262/

相关文章:

java - 该代码是否会对 MySQL 可用连接产生任何影响?

java - 如何在netbeans中处理图像上的文本字段

java - 在 JSP 上使用 Apache POI 时出现异常

android - Flutter Gradle 任务失败 MergeDexDebug

android - 无法执行 dex : method ID not in [0, 0xffff]:65536

android - 如何将 RelativeLayout 的宽度设置为与兄弟 View 相同?

java - 我们可以从evernote文件中提取文本内容吗

java - Eclipse 报告正确代码的 HTML 警告(正如我假设的那样)

android - 如何从sqlite3加载html文件?

android - 适用于 Android 的单声道