Java - Byte Order

2020. 2. 3. 23:36plming/Java

하나의 DATA값이

여러 Byte로 저장되는 경우

CPU마다 처리순서가 다르다.

 

숫자 769를 4 Byte 공간에 넣는다고 했을 때

큰 숫자가 앞에 있다고 인식하고 처리하는 Big Endian

(이때 저장된 Hex값은 0x00 0x00 0x03 0x01 으로 저장되어있다.)

 

작은 숫자가 앞에 있다고 인식하고 처리하는 Little Endian

(이때 저장된 Hex값은 0x01 0x03 0x00 0x00 으로 저장되어있다.)

 

 

그런데, 뭐?

Local에서 지지고 볶을 때는 관계없다.

 

하지만, 네트웍을 통해 전달하는 경우

주는 쪽에서 생성한 방식과

받는 쪽에서 인식해야 하는 방식이 다르다면?

769원이

16,973,824원으로 인식될 수도 있게된다.

 

 

이때 양쪽의 처리방식을 맞추면

동일한 값으로 인식할 수 있다.

 

내 PC의 처리방식(Byte Order)는 뭘까?

 ByteOrder.nativeOrder();

ByteOrder.BIG_ENDIAN 과 ByteOrder.LITTLE_ENDIAN 중 하나가 나온다.

 

 

됐고, 난 이걸로 할꺼야.

원하는 처리방식으로 Byte 배열을 얻고 싶다면?

769를 Little Endian 값으로 받고 싶다면?

 ByteBuffer byteBuffer = ByteBuffer.allocate( Integer.BYTES );
 byteBuffer.clear();
 byteBuffer = byteBuffer.order( ByteOrder.LITTLE_ENDIAN );
 int value = 769;
 byteBuffer.putInt( value );
 byte[] bytes = byteBuffer.array();

 

clear 와 order 를 실행하지 않으면 꽝!!!

 

내 PC의 처리방식이 뭐든지간에

JAVA는 기본적으로 BIG_ENDIAN으로 생성된다.

이걸 잊어도 꽝!!!

 

잘 챙겨서

날 벼락 맞는 일 생기지 않기를...