[英]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並僅發送byte
或short
原語?
在套接字的另一側,您可以重建將字節(或短整數)除以10.0的浮點數
對於這種解決方案, 您可以節省通過網絡發送的比特數的4倍(用於字節)或2倍(簡稱) 。
注意: 如果您知道可能的數據范圍限制為相同的已知值,則可以應用此解決方案。 例如,發送0到10之間的值(含1個十進制數字)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.