Мы используем Java ByteBuffer для связи через сокет с сервером C ++.Мы знаем, что Java - Big-Endian, а Socket-связь также Big-Endian.Поэтому всякий раз, когда поток байтов получен и помещен в ByteBuffer Java, мы вызываем getInt () для получения значения.Без проблем, без преобразования.
Но если каким-то образом мы специально установим порядок байтов ByteBuffer в Little-endian (мой коллега на самом деле сделал это),
будетJava автоматически конвертирует Big-endian в Little-endian, когда данные помещаются в ByteBuffer?
Тогда getInt () версии Little-endian вернет вам правильное значение?
Я думаю, ответ на два вышевопросы да.Но когда я пытаюсь проверить свои догадки и попытаться выяснить, как getInt () работает в ByteBuffer, я обнаружил, что это абстрактный метод.Единственный подкласс ByteBuffer - это класс MappedByteBuffer, который не реализует абстрактный метод getInt ().Так где же реализация метода getInt ()?
Для отправки, потому что мы используем байтовый байтовый код с прямым порядком байтов, нам нужно преобразовать их в байты с байтовым порядком байтов до того, как мы поместим их в сокет.