繁体   English   中英

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);

就通过网络发送的数据量而言,有效的解决方案是直接发送浮点数。

每个浮点数均为32位长度,如果您需要发送浮点数,则不可能将其减小。

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

例如,而不是发送

5.5f
1.5f
2.5f
3.5f

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM