2015-07-10 120 views
0

我对java套接字编程比较新,想通过tcp套接字从Floatbuffer变量发送数据。这应该在android平台上运行。Java通过tcp套接字有效地发送floatbuffer

下面是一些代码来说明什么,我想做的事:

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 

我相信你可以提取每一个浮动和单独寄过去的插座,但我不知道是否有做更有效的方式所以?

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

我今天试了这个,但我得到的错误:尝试调用空对象引用虚拟方法'int java.nio.channels.SocketChannel.write(java.nio.ByteBuffer)' –

+0

听起来像你的'ByteBuffer'是空值。你完全按照这个代码吗? – Kayaman

+0

它是空的sc对象,但让它在这个例子后面工作http://tutorials.jenkov.com/java-nio/server-socket-channel.html –

1

高效溶液在通过网络发送的数据的量方面被直接发送浮子。

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

另一种不一定适用的方法是使用不同的类型发送较少的位。

例如,而不是发送

5.5f 
1.5f 
2.5f 
3.5f 

为什么不乘以10它们只发送byteshort元?

在灯座的另一侧可以通过10.0

重建浮子除以字节(或短)对于这种溶液可以保存4倍(对于字节)或2x(简称)在通过网络发送的位的条款

注:,如果你知道可能的数据的范围限制在同一已知值可以应用该解决方案。作为一个例子,发送0到10之间的值和一个十进制数字。

+0

如果他需要发送'5.57f'而不是? – Kayaman

+0

有必要查看要发送的数据值的范围。有时候从浮点数传递到字节或从浮点数传递到short可能有时不成立。 –

+0

总的来说不是,所以这不是一个很好的答案。 – Kayaman

相关问题