자바의 기본 데이터형은 Big Endian이다. 이것은 최상위 바이트MSB 가 메모리의 가장 처음에 위치하는 형태이다. 가령 정수 0x01234567이 있다면 이것은 바이트 0x01. 0x23, 0x45, 0x67 순으로 메모리에 위치하게 되고 또한 네트웤 출력에서도 이 순서로 출력이 된다. 어떻게 보면 이것이 당연하다고 생각되겠지만 컴퓨터에서는 최상위 바이트가 마지막으로 위치하는 리틀 엔디안을 많이 이용한다.
리틀 엔디안에서 0x1234567은 0x67, 0x45, 0x23, 0x01 순으로 메모리에 위치하게 된다. cpu에 따라서 다르기는 하지만 대부분의 C/C++ 은 리틀엔디안 이다. 그러므로 자바 시스템에서 리틀엔디안 시스템과 통신을 할 때에는 바이트 순서를 조심해야 한다. 정수 0x1234567 네트웤을 통해 리틀 엔디안 시스템으로 전송할 때 리틀 엔디안의 시스템에서 이 데이터를 메모리에 차례대로 집어넣고 정수로 바꾸면 실제수는 0x67452301이 된다. 그러므로 처음부터 자바 시스템에서 데이터를 거꾸로 보내거나 리틀 엔디안 시스템에서 이것을 거꾸로 바꾸어서 처리해주어야 한다. 그리고 또 조심해야 할 것은 문자 인코딩 방식이다. 자바에서는 문자에 내부적으로 유니 코드를 사용하므로 완성형 코드를 사용하는 윈도우 프로그램과 통신하기 위해서는 인코딩에 대해서 신경 써야 한다. 물론 문자 스트림에서는 현재 시스템의 문자 인코딩 방식으로 입출력하지만 바이트 배열을 인코딩 방식을 지정해서 입출력하는 것이 더 명확하다.
백엔드/Java
댓글