我想從一個Socket向另一個套接字(從ServerSocket創建)發送對應於幾種不同類型(比如說爲了簡單起見,一個float和一個int)的單個數據流接受())。但是,我不確定實現這個目標的最佳方法是什麼。如果我想使用readInt()或readFloat(),我似乎需要分別發送它們,我想這不是理想的(但如果我錯了,請糾正我)。用套接字同時發送多種類型
的代碼會被執行啓動以下(其中說的持股量將被存儲在b中的第4個字節,整型將被存儲在b中的最後4個字節)
ServerSocket socket = new ServerSocket(port);
in=new DataInputStream(socket.accept().getInputStream());
byte[] b = new byte[8];
in.read(b);
所以非常好,但我現在想只將前四個字節轉換爲一個浮點數,最後四個字節轉換爲一個int。我可以做類似
float myFloat = ByteBuffer.wrap(b).getFloat();
得到的浮點數,但我怎麼得到int?在C++中,我只是將引用傳遞給b中的第五個元素,但據我所知,這在java中是不可能的。當然,我可以使用一些庫來創建b的最後四個元素的新數組,但是這似乎有點矯枉過勞了?或者是唯一的方法?
有關通過套接字同時發送多種不同類型的其他建議,非常感謝。
爲什麼你不能在你發送的每個值之間使用分隔符(比如換行符)? – nafas
你可以請擴展一下嗎?這聽起來像你想我發送一個字符串,但我不想發送更多的數據比必要的(即我只想發送8個字節,如果可能的話)。 –
如果你已經知道輸入將是4個字節的int和4個字節的float,那麼你可以簡單地按字節準備好字節,並使用前4個爲你的int和下4個爲你的浮點數,如果你需要發送多個值在一起,你需要一個分隔符,只是你知道一個新的行是一個字節(值10) – nafas