簡體   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