我们使用 Java ByteBuffer 与 C++ 服务器进行套接字通信。我们知道 Java 是 Big-endian,而 Socket 通信也是 Big-endian。所以每当Java接收到字节流并将其放入ByteBuffer中时,我们都会调用getInt()来获取值。没问题,没有转换。
但是如果我们以某种方式专门将 ByteBuffer 字节顺序设置为 Little-endian(我的同事实际上是这样做的),
当数据放入ByteBuffer时,Java会自动将Big-endian转换为Little-endian吗?
那么 Little-endian 版本的 getInt() 会返回一个正确的值给你吗?
我想以上两个问题的答案都是肯定的。但是当我尝试验证我的猜测并尝试找出 getInt() 在 ByteBuffer 中的工作原理时,我发现它是一个抽象方法。ByteBuffer 的唯一子类是 MappedByteBuffer 类,它没有实现抽象 getInt()。那么getInt()方法的实现在哪里呢?
对于发送,因为我们使用的是 Little-endian ByteBuffer,所以我们需要将它们转换为 Big-endian 字节,然后才能放入套接字。