«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как преобразовать длинное значение в массив байтов и обратно в Java?

Как преобразовать длинное значение в массив байтов и обратно в Java?

Опубликовано 8 ноября 2024 г.
Просматривать:235

How to Convert a Long Value to a Byte Array and Back in Java?

Преобразование Long в массив байтов и обратно в Java

В Java преобразование примитивного типа данных long в массив байтов (byte[] ) и наоборот — это обычная задача для различных операций, например отправки данных по TCP-соединению. Вот комплексное решение для такого преобразования:

Long to Byte Array

public byte[] longToBytes(long x) {
    ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
    buffer.putLong(x);
    return buffer.array();
}

Этот метод использует класс ByteBuffer для создания буфера размером Long.BYTES, который представляет собой количество байтов, необходимое для представления длинного значения. Метод putLong() используется для записи длинного значения в буфер, а метод array() возвращает базовый массив байтов, представляющий длинное значение.

Массив байтов в Long

public long bytesToLong(byte[] bytes) {
    ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);
    buffer.put(bytes);
    buffer.flip(); // Flip the buffer to prepare for reading
    return buffer.getLong();
}

Чтобы преобразовать массив байтов обратно в длинный, создается новый ByteBuffer и загружается с данным массивом байтов. Метод Flip() используется для подготовки буфера к чтению. Наконец, метод getLong() считывает длинное значение из буфера.

Инкапсуляция во вспомогательном классе

Для удобства методы преобразования можно инкапсулировать в утилиту класс:

public class ByteUtils {
    private static ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES);

    public static byte[] longToBytes(long x) {
        buffer.putLong(0, x);
        return buffer.array();
    }

    public static long bytesToLong(byte[] bytes) {
        buffer.put(bytes, 0, bytes.length);
        buffer.flip(); // Flip the buffer to prepare for reading
        return buffer.getLong();
    }
}

Этот служебный класс предоставляет простой способ выполнения преобразования без необходимости каждый раз создавать экземпляры ByteBuffer и управлять ими.

Соображения относительно порядка байтов

Примечание что класс ByteBuffer использует собственный порядок байтов системы. Если требуется кросс-платформенная совместимость, могут потребоваться дополнительные соображения по обработке порядка байтов.

Альтернативное решение: использование библиотек

Хотя встроенные решения Java, представленные выше, являются адекватными, в определенных сценариях они могут стать утомительными. Для сложных или расширенных задач преобразования данных рассмотрите возможность использования такой библиотеки, как Guava или Apache Commons, которые предоставляют более комплексные и эффективные решения.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3