"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo convertir un valor largo en una matriz de bytes y viceversa en Java?

¿Cómo convertir un valor largo en una matriz de bytes y viceversa en Java?

Publicado el 2024-11-08
Navegar:939

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

Conversión de largo a matriz de bytes y viceversa en Java

En Java, conversión de un tipo de datos primitivo largo a una matriz de bytes (byte[] ) y viceversa es una tarea común para diversas operaciones, como enviar datos a través de una conexión TCP. Aquí hay una solución integral para lograr esta conversión:

Long to Byte Array

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

Este método utiliza la clase ByteBuffer para crear un búfer de tamaño Long.BYTES, que es el número de bytes necesarios para representar un valor largo. El método putLong() se utiliza para escribir el valor largo en el búfer, y el método array() devuelve la matriz de bytes subyacente que representa el valor largo.

Byte Array to 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();
}

Para volver a convertir la matriz de bytes en larga, se crea un nuevo ByteBuffer y se carga con la matriz de bytes dada. El método flip() se utiliza para preparar el búfer para la lectura. Finalmente, el método getLong() lee el valor largo del búfer.

Encapsulación en una clase auxiliar

Para mayor comodidad, los métodos de conversión se pueden encapsular en una utilidad clase:

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();
    }
}

Esta clase de utilidad proporciona una forma sencilla de realizar la conversión sin tener que crear y administrar instancias de ByteBuffer cada vez.

Consideraciones de endianidad

Nota que la clase ByteBuffer utiliza la endianidad nativa del sistema. Si se requiere compatibilidad multiplataforma, es posible que sean necesarias consideraciones adicionales para el manejo del endianismo.

Solución alternativa: uso de bibliotecas

Si bien las soluciones Java nativas proporcionadas anteriormente son adecuadas, pueden volverse tediosos en ciertos escenarios. Para necesidades de conversión de datos complejas o ampliadas, considere utilizar una biblioteca como Guava o Apache Commons, que brindan soluciones más completas y eficientes.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3