5
我是Java NIO的新手,並且不確定如何做到這一點。如何從ByteBuffer獲取Int剩餘字節(Java NIO)
假設我已經從套接字讀取了一些數據到ByteBuffer
,並使用ByteBuffer
的get方法消耗了除1之外的所有字節。我知道接下來的事情將是四個字節的二進制格式的整數,所以我想使用getInt()
,但只有int的第一個字節在緩衝區中。
對我來說很自然的是從連接中填充更多字節的緩衝區,然後繼續。如果我理解正確,我可以通過
buf.compact();
buf.position(buf.limit());
buf.limit(buf.capacity());
然後讀取更多字節。
由於沒有這種行爲的方法,但有flip()
方法,我不知道我的想法是否是錯誤的。有沒有更好的方法來做到這一點?
這種情況自然會發生,例如,如果連接傳遞一個長度+數據消息流。
不可以。仔細閱讀這個問題......這是從一個套接字進來的數據,被緩衝,並且碰巧整數的第一個字節被「分離」了。不過,其他字節即將出現,因此讀取一個字節並進行轉換將會是錯誤的。 OP想要的是掛在那個字節上,直到其他3個字節是已知的。 – dcsohl
@dcsohl你對我的錯誤 – Pooya
在壓縮()後,緩衝區被設置爲能夠讀取更多字節。讀取更多字節後,「flip()」並閱讀更多內容。 –