Java send floatbuffer over a tcp socket efficiently
我对使用Java进行套接字编程相对较新,并且想通过tcp套接字从Floatbuffer变量发送数据。这应该在android平台上运行。
这里有一些代码来说明我想做的事情:
1 2 3 4 5 6 7 8 9 10 | 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 |
我确定您可以提取每个浮点数,然后分别通过套接字发送它们,但是我想知道是否有更有效的方法?
就通过网络发送的数据量而言,最有效的解决方案是直接发送浮点数。
每个浮点数均为32位长度,如果需要发送浮点数,则不可能将其减小。
另一种方法(并非总是适用)是使用其他类型发送更少的位。
例如代替发送
1 2 3 4 | 5.5f 1.5f 2.5f 3.5f |
为什么不将它们乘以10并仅发送
在套接字的另一侧,您可以重构浮点数,将字节(或短整数)除以10.0。
对于这种解决方案,就通过网络发送的比特而言,您可以节省4倍(用于字节)或2倍(简称)。
注意:如果您知道可能的数据范围限制为相同的已知值,则可以应用此解决方案。例如,发送0到10之间的值(带1个小数位)。
如何为其创建背景
1 2 3 4 5 6 7 | 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); |