Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的字节数据排队_Java_Android - Fatal编程技术网

java中的字节数据排队

java中的字节数据排队,java,android,Java,Android,我想通过网络连续传输数据。源代码给了我一个字节数组,我想将它存储在一个数据结构中,作为缓冲区来补偿任何网络延迟 以队列方式存储字节的最有效的数据结构是什么。将其视为一个管道,其中一个线程泵入数据,另一个线程通过网络读取并发送数据,而管道本身足够长,可以包含多个输入数据帧 队列是否足够有效?如果一次将字节放入一个队列中,队列将不会有效。它会消耗大量内存,产生GC压力,并减慢速度 如果在队列中放入大小合理(比如64kB)byte[]s或ByteBuffers,则可以使队列的开销合理。缓冲区大小可以根

我想通过网络连续传输数据。源代码给了我一个字节数组,我想将它存储在一个数据结构中,作为缓冲区来补偿任何网络延迟

以队列方式存储字节的最有效的数据结构是什么。将其视为一个管道,其中一个线程泵入数据,另一个线程通过网络读取并发送数据,而管道本身足够长,可以包含多个输入数据帧


队列是否足够有效?

如果一次将
字节
放入一个队列中,队列将不会有效。它会消耗大量内存,产生GC压力,并减慢速度

如果在队列中放入大小合理(比如64kB)
byte[]
s或
ByteBuffer
s,则可以使队列的开销合理。缓冲区大小可以根据性能实验进行调整和更改,甚至可以在运行时进行自适应

TCP已经补偿了网络延迟。如果您使用的是UDP,那么您将需要正确处理拥塞,否则情况会很糟糕。在实践中,使用TCP或UDP直接创建了大量额外的工作和车轮的改造

(或纯Java)是一个很好的库选项,具有高效的wire协议(对于实时股票交易平台来说已经足够好了)。它透明地处理排队,并为不同的客户机模型提供了许多选项,包括PUB-SUB之类的东西,如果您在广播中有很多客户机,这些东西会有所帮助。在流程中,ZeroMQ可以管理作为生产者和消费者的数据排队。您甚至可以使用它将相同的字节高效地广播给使用相同流执行独立操作的工作人员(例如:一个执行使用情况计量,另一个执行代码转换)


还有其他一些库也可以使用。例如,我认为这样的事情处理起来很有效。

你应该看看OKIO图书馆

我投反对票,因为没有明确解释OKIO为什么会解决这个问题。有些用户可以用谷歌搜索,只需要正确的关键字。我对数据结构更感兴趣,网络传输只是一个使用它的应用程序,它可以改变,例如,如果我想在本地处理数据而不是传输数据。在这种情况下,ZeroMQ仍然很好,因为它同样适用于高效的进程内(线程之间)工作。hmm:(与JDK捆绑在一起的api中没有任何内容?如果你能为放置在JDK队列上的缓冲区找到一个合理的大小,用没有大量队列元素而节省的内存来交换填充缓冲区的延迟,那么你肯定可以对JDK队列做这件事。这是一件很难调整的事情,但肯定是可以实现的。是的,这是我最初的想法本打算将小块数据作为字节[]放入队列,但考虑到数据的输入和输出速率,不确定是否会将其杀死。但现在根据您的推理,我认为队列适合小数据