更新:
与此问题相关的项目自从分享此帖子后发生了很大变化,实际上我强烈建议避免使用 TCP 套接字传输图像,因为它会使传输速度变慢。我解决了通过 UDP 传输图像并将它们从 YUV 压缩为 JPG 而不是使用 RGB 的问题。这使得传输和重建图像的工作变得更加容易,因为您不必处理图像的每一层。
要知道图像的大小,我只是简单地将此信息添加到 UDP 数据包的第一个字节,因此如果未正确接收到该大小,套接字超时将丢弃该数据包,并且在接收时通信仍然有效下一个 UDP 数据包。
由于这不是原始问题的答案,所以我将其保留为未回答,以便有相同问题的其他人可以找到解决方案并将其发布在这里。
------------------------ 原帖:-------------------- ------
首先感谢您的帮助并为我的英语道歉,我来自西类牙。
我正在使用套接字通过 TCP 从计算机接收图像。对于每张图像,我得到层数 (RGB)、每一层的行和列,然后是每个像素的值。为了收集数据,我使用了 DataInputStream
。
通常它工作正常,但有时我得到错误的行数和列数值,导致下一个函数出现问题,即应用程序卡住等待永远不会发送的数据,或者只是导致数组上的索引错误保存数据。
所以如果行数和列数太多,我想清除数据,但是我找不到任何方法来清除充满错误字节的像素值的DataInputStream
。
此外,我不知道DataInputStream
的大小,因为大小是按以下方式计算的:Layers * Width * height
。所以如果我没有得到这个阵营的真正值(value),我就不知道我必须跳过多少字节。
问题:
有人知道清除
DataInputStream
的方法吗?如果不是,我应该使用另一种类型的输入方式吗?
BufferedInputStream
?
最佳答案
我怀疑您的问题并不是真正关于清除输入流,而是更多关于在不同步后找回。一种常见的方法是使用 boundary-pattern (用于多部分 html 文档和 mjpeg 流)。因此,如果您在流程中迷路了,您会继续搜索此模式,直到找到为止。
如果你真的想跳过字节,你可以使用DataInputStream.skipBytes(int n)
方法。
关于java - 有什么方法可以清除 Java 中 DataInputStream 的数据? (一个安卓应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11029262/