Java 如何通过网络传输缓冲区列表

Java 如何通过网络传输缓冲区列表,java,networking,Java,Networking,我有一个Java网络应用程序,运行两个线程,一个用于捕获、编码和发送音频,另一个用于接收、解码和播放音频。我用来编码音频的方法返回一个列表。我想要使用的解码方法将列表作为参数,因此我需要能够在通过网络发送数据后重建列表 我遇到的问题是,我无法想出如何在网络上正确发送所有数据而不使其损坏。我相信我在网络编程方面的知识有限,所以我正在寻求帮助。我曾尝试过几种不同的方法,如数据包、流、SocketChannels等,但我一直未能成功实现我的目标。对于我需要使用的网络传输协议没有任何要求,所以任何设置都

我有一个Java网络应用程序,运行两个线程,一个用于捕获、编码和发送音频,另一个用于接收、解码和播放音频。我用来编码音频的方法返回一个列表。我想要使用的解码方法将列表作为参数,因此我需要能够在通过网络发送数据后重建列表


我遇到的问题是,我无法想出如何在网络上正确发送所有数据而不使其损坏。我相信我在网络编程方面的知识有限,所以我正在寻求帮助。我曾尝试过几种不同的方法,如数据包、流、SocketChannels等,但我一直未能成功实现我的目标。对于我需要使用的网络传输协议没有任何要求,所以任何设置都可以。如何通过网络发送缓冲区列表,以便在接收线程中重建它?

您要查找的是,它由SocketChannel、datagramssocketchannel和FileChannel实现:

此时,部分或全部ByteBuffer应该是空的,理想情况下是全部。如果没有,则必须处于非阻塞模式,因此请在通道上选择OP_WRITE,并在获得后重复上述操作


但是你无法在接收者处准确地重建这个列表。数据将作为流发送。即使您使用UDP,写入也将构成一个数据报,可能过大。

您上次尝试的代码是什么?
ByteBuffer[] bbs = list.toArray(new ByteBuffer[0]);
for (ByteBuffer bb : bbs)
    bb.flip(); // assuming this hasn't already been done
long count = channel.write(bbs);
for (ByteBuffer bb : bbs)
    bb.compact();