Java 通过 tcp 套接字有效地发送 floatbuffer
Java send floatbuffer over a tcp socket efficiently
我对 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
我相信您可以提取每个浮点数并通过套接字单独发送它们,但我想知道是否有更有效的方法来做到这一点?
如何为它创建支持 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);
就通过网络发送的数据量而言最有效的解决方案是直接发送浮点数。
每个float都是32位长度,如果要发送float是不能减少的。
另一种并不总是适用的方法是使用不同的类型发送更少的位。
例如而不是发送
5.5f
1.5f
2.5f
3.5f
为什么不将它们乘以 10 并只发送 byte
或 short
原语?
在套接字的另一侧,您可以重建将字节(或短)除以 10.0 的浮点数
对于这种解决方案您可以节省 4 倍(字节)或 2 倍(简称)通过网络发送的比特。
注意:如果您知道可能的数据范围限制为相同的已知值,您可以应用此解决方案。例如发送 0 到 10 之间的值,带 1 个十进制数字。
我对 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
我相信您可以提取每个浮点数并通过套接字单独发送它们,但我想知道是否有更有效的方法来做到这一点?
如何为它创建支持 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);
就通过网络发送的数据量而言最有效的解决方案是直接发送浮点数。
每个float都是32位长度,如果要发送float是不能减少的。
另一种并不总是适用的方法是使用不同的类型发送更少的位。
例如而不是发送
5.5f
1.5f
2.5f
3.5f
为什么不将它们乘以 10 并只发送 byte
或 short
原语?
在套接字的另一侧,您可以重建将字节(或短)除以 10.0 的浮点数
对于这种解决方案您可以节省 4 倍(字节)或 2 倍(简称)通过网络发送的比特。
注意:如果您知道可能的数据范围限制为相同的已知值,您可以应用此解决方案。例如发送 0 到 10 之间的值,带 1 个十进制数字。