JAVA 기본적인 데이터 타입별 byte size 및 숫자 범위를 확인해 봐야 할 필요가 있습니다. 외부에서 들어오는 byte형식의 데이터는 자바 기본 타입으로 형변환이 필요한데 원천이되는 byte가 시스템별로 인코딩 타입이 다르고 그 바이트 나열이 LITTLE_ENDIAN 또는 BIG_ENDIAN 등등 다양한 내용을 구분해 형변환이 필요합니다. 이제부터 그 내용을 확인하는 법에 대해 알아보도록 하겠습니다.
아래의 소스는 현재 시스템의 endian 확인과 각 데이터 타입의 size와 범위를 확인하는 기본 소스이다.
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
public class TypeSize {
public static void main(String[] args) {
System.out.println("# int range : " + Integer.MIN_VALUE + " ~ " + Integer.MAX_VALUE + ", byte size : " + Integer.BYTES);
System.out.println("# long range : " + Long.MIN_VALUE + " ~ " + Long.MAX_VALUE + ", byte size : " + Long.BYTES);
System.out.println("# short range : " + Short.MIN_VALUE + " ~ " + Short.MAX_VALUE + ", byte size : " + Short.BYTES);
System.out.println("# char range : " + Character.MIN_VALUE + " ~ " + Character.MAX_VALUE + ", byte size : " + Character.BYTES);
System.out.println("# byte range : " + Byte.MIN_VALUE + " ~ " + Byte.MAX_VALUE + ", byte size : " + Byte.BYTES);
System.out.println("# ENDIAN : " + ByteOrder.nativeOrder());
int value = 123456789;
byte [] bytes = ByteBuffer.allocate(4).putInt(value).array();
for (byte b : bytes) {
System.out.format("0x%x ", b);
}
System.out.println();
byte [] bytes2 = ByteBuffer.allocate(4).order(ByteOrder.nativeOrder()).putInt(value).array();
for (byte b : bytes2) {
System.out.format("0x%x ", b);
}
}
}
결과는 아래와 같다
# int range : -2147483648 ~ 2147483647, byte size : 4
# long range : -9223372036854775808 ~ 9223372036854775807, byte size : 8
# short range : -32768 ~ 32767, byte size : 2
# char range : ~ , byte size : 2
# byte range : -128 ~ 127, byte size : 1
# ENDIAN : LITTLE_ENDIAN
0x7 0x5b 0xcd 0x15
0x15 0xcd 0x5b 0x7
JAVA 어플리케이션에서 사용하는 라이선스 확인 (0) | 2024.12.18 |
---|---|
현장에서 최신 OpenJDK를 고려할 때 (0) | 2024.11.28 |
개발 프로세스에서 Ramp-down Ramp-up phase (0) | 2024.10.07 |
Java 프로그래밍에서 인코딩 및 디코딩 이야기 (0) | 2024.05.31 |
JAVA 스트림에 관한 이야기 (0) | 2024.05.26 |