"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como converter um valor longo em uma matriz de bytes e vice-versa em Java?

Como converter um valor longo em uma matriz de bytes e vice-versa em Java?

Publicado em 2024-11-08
Navegar:128

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

Convertendo Long em Byte Array e Back em Java

Em Java, convertendo um tipo de dados primitivo longo em uma matriz de bytes (byte[] ) e vice-versa é uma tarefa comum para diversas operações, como o envio de dados por uma conexão TCP. Aqui está uma solução abrangente para conseguir essa conversão:

Long to Byte Array

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

Este método usa a classe ByteBuffer para criar um buffer de tamanho Long.BYTES, que é o número de bytes necessários para representar um valor longo. O método putLong() é usado para gravar o valor longo no buffer, e o método array() retorna a matriz de bytes subjacente que representa o longo.

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 converter a matriz de bytes de volta para longa, um novo ByteBuffer é criado e carregado com a matriz de bytes fornecida. O método flip() é usado para deixar o buffer pronto para leitura. Finalmente, o método getLong() lê o valor longo do buffer.

Encapsulamento em uma classe auxiliar

Por conveniência, os métodos de conversão podem ser encapsulados em um utilitário classe:

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 classe de utilitário fornece uma maneira simples de realizar a conversão sem ter que criar e gerenciar instâncias de ByteBuffer todas as vezes.

Considerações sobre Endianness

Nota que a classe ByteBuffer usa o endianismo nativo do sistema. Se a compatibilidade entre plataformas for necessária, considerações adicionais para lidar com endianness podem ser necessárias.

Solução alternativa: usando bibliotecas

Embora as soluções Java nativas fornecidas acima sejam adequadas, eles podem se tornar entediantes em determinados cenários. Para necessidades de conversão de dados complexas ou estendidas, considere usar uma biblioteca como Guava ou Apache Commons, que fornecem soluções mais abrangentes e eficientes.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3