C++ サーバーとのソケット通信に Java ByteBuffer を使用しています。Java はビッグエンディアンであり、ソケット通信もビッグエンディアンです。そのため、バイト ストリームが受信され、Java によって ByteBuffer に入れられるたびに、getInt() を呼び出して値を取得します。問題ありません。変換はありません。
しかし、何らかの方法で ByteBuffer のバイト順をリトルエンディアンに具体的に設定すると (私の同僚が実際にこれを行いました)、
データがByteBufferに入れられると、Javaはビッグエンディアンをリトルエンディアンに自動的に変換しますか?
次に、リトル エンディアン バージョンの getInt() は正しい値を返しますか?
上記の 2 つの質問に対する答えはイエスだと思います。しかし、推測を検証して、ByteBuffer で getInt() がどのように機能するかを調べようとすると、それが抽象メソッドであることがわかりました。ByteBuffer の唯一のサブクラスは、抽象 getInt() を実装していない MappedByteBuffer クラスです。getInt() メソッドの実装はどこにあるのでしょうか。
送信には、リトルエンディアンの ByteBuffer を使用しているため、ソケットに入れる前にビッグエンディアンのバイトに変換する必要があります。