我问自己是否有一个很好的解决方案,通过TCP接收数据并读取DataInputStream中的数据,并将数据存储在“动态”大小的字节数组中。我想到了一些解决方案,比如写入缓冲区,最后将它存储在一个与我收到的数据包一样大的创建数组中。
这里有一个例子:我通过TCP接收的数据(逐字节)是n * 13字节大,数据包的结尾是13字节的零(13字节的零是唯一的,不能在之前的数据中) 。下一个数据包是m * 13字节+ 13字节的零,依此类推。所以我想听流和存储,例如n * 13字节数组中没有零的字节(我之前不知道一个数据集的大小)。
你能告诉我如何做到这一点吗?
提前致谢!
克里斯
答案 0 :(得分:0)
我会直接将数据读入直接的ByteBuffer。您也不需要DataInputStream。我希望ByteBuffer大于所需的比例,例如1 MB或10 MB并使用未使用的直接缓冲区(如未使用的本机内存)仅使用虚拟内存而非实内存的事实。我会确保尽可能多地重复使用此缓冲区,最好是在应用程序的生命周期中使用。
在64位环境中,您可以使缓冲区非常大。例如1 GB没有太大影响。
如果您想最小化内存消耗,我会在您收到数据时对其进行处理。这样你就不必先存储它。听起来最小大小是13个字节,并且会产生合理的缓冲区大小,如512字节或2 KB。