0

我问自己是否有一个很好的解决方案可以通过 TCP 接收数据并读取 DataInputStream 中的数据并将数据存储在“动态”大小的字节数组中。我考虑了一些解决方案,例如写入缓冲区,最后将其存储在一个与我收到的数据包一样大的创建数组中。

这里有一个例子:我通过 TCP 接收的数据(逐字节)是 n*13 字节大,数据包的结尾是 13 个零字节(13 个零字节是唯一的,不能在之前的数据中)。下一个数据包是 m*13 Byte + 13 Byte of zeros,依此类推。所以我想听流并将例如 n*13 字节存储在一个不带零的字节数组中(我以前不知道一个数据集的大小)。

你能告诉我如何做到苗条吗?

提前致谢!

克里斯

4

1 回答 1

0

我会将数据直接读取到直接的 ByteBuffer 中。您也不需要 DataInputStream 。我会让 ByteBuffer 比需要的大,例如 1 MB 或 10 MB,并使用未使用的直接缓冲区(如未使用的本机内存)仅使用虚拟内存而不使用真实内存的事实。我会确保尽可能多地重复使用这个缓冲区,最好是在应用程序的生命周期内。

在 64 位环境中,您可以使缓冲区非常大。例如 1 GB 没有太大影响。

如果您想最大程度地减少内存消耗,我会在您收到数据时对其进行处理。这样您就不必先存储它。听起来最小大小是 13 字节,并且可以使缓冲区大小合理,例如 512 字节或 2 KB。

于 2013-03-20T01:34:27.953 回答