Java有效地通过tcp套接字发送floatbuffer

时间:2015-07-10 11:58:12

标签: java sockets tcp buffer

我对java中的套接字编程比较新,并希望通过tcp套接字从Floatbuffer变量发送数据。这应该在Android平台上运行。

这里有一些代码来说明我想要做的事情:

FloatBuffer buf = FloatBuffer.allocate(4);
buf.put(5.5f);
buf.put(1.5f);
buf.put(2.5f);
buf.put(3.5f);

ServerSocket server = new ServerSocket(38300);
con = server.accept();

// somehow send the whole buf variable over the tcp socket

我相信你可以提取每个浮动并单独通过套接字发送它们,但是我想知道是否有更有效的方法呢?

2 个答案:

答案 0 :(得分:1)

如何为它创建支持ByteBuffer。这样,您就如何通过网络传输数据有很多选择。使用SocketChannel,您可以轻松获得它。

ByteBuffer buf = ByteBuffer.allocate(floats*4);
FloatBuffer floats = buf.asFloatBuffer();
floats.put(5.5f);
...
ServerSocket server = new ServerSocket(38300);
SocketChannel sc = server.accept().getChannel();
sc.write(buf);

答案 1 :(得分:1)

通过网络发送的数据量效率解决方案 正在直接发送浮动广告。

每个浮点数都是32位长度,如果需要发送浮点数,则无法减少它。

替代方案(并非总是适用)是使用其他类型发送更少的位。

例如,而不是发送

5.5f
1.5f
2.5f
3.5f

为什么不将它们乘以10并仅发送byteshort原语?

在套接字的另一侧,您可以重建浮点数,将字节(或短)除以10.0

对于这种解决方案,您可以通过网络发送的比特数保存4x(字节)或2x(简称)

注意:如果您知道可能数据的范围限制为相同的已知值,则可以应用此解决方案。例如,发送0到10之间的值,带有1个十进制数字。