"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 긴 값을 바이트 배열로 변환하고 Java에서 다시 변환하는 방법은 무엇입니까?

긴 값을 바이트 배열로 변환하고 Java에서 다시 변환하는 방법은 무엇입니까?

2024-11-08에 게시됨
검색:190

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

Long을 바이트 배열로 변환하고 Java에서 다시 변환

Java에서는 긴 기본 데이터 유형을 바이트 배열로 변환(byte[] ) 및 그 반대의 경우는 TCP 연결을 통해 데이터를 전송하는 등 다양한 작업에 대한 일반적인 작업입니다. 이 변환을 달성하기 위한 포괄적인 솔루션은 다음과 같습니다.

Long을 바이트 배열로

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

이 메서드는 ByteBuffer 클래스를 사용하여 Long 값을 나타내는 데 필요한 바이트 수인 Long.BYTES 크기의 버퍼를 생성합니다. putLong() 메서드는 Long 값을 버퍼에 쓰는 데 사용되며 array() 메서드는 Long을 나타내는 기본 바이트 배열을 반환합니다.

바이트 배열을 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();
}

바이트 배열을 다시 long으로 변환하기 위해 새 ByteBuffer가 생성되고 지정된 바이트 배열과 함께 로드됩니다. Flip() 메서드는 버퍼를 읽을 수 있도록 준비하는 데 사용됩니다. 마지막으로, getLong() 메소드는 버퍼에서 긴 값을 읽습니다.

헬퍼 클래스의 캡슐화

편의를 위해 변환 메소드는 유틸리티에 캡슐화될 수 있습니다. class:

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