그전에 한가지 스트림이라는 지식에 대해 살펴보고 진행하자.
우리가 작성하는 문자들은 데이터들은 컴퓨터가 문자하나하나를 인식할 수 있을까?
다음의 예를 살펴보자.
- Stream과정
① 'h'라는 문자를 키보드 클릭 → ②운영체제(OS)에 전달(동작 : 사용자가 키보드 'h' 클릭) → ③메모장에 'h'라는 문자를 보여줌
이 과정에서 컴퓨터가 h라는 데이터를 입력받은것을 어떻게 인식할 수 있을까?
바로 이 문자 h라는 것을 컴퓨터가 이해할 수 있도록 바이트단위로 변환시킨뒤 데이터가 전달되는 것이다. (Input Stream)
그리고 컴퓨터는 이것을 다시 사용자들이 인식할 수 있도록 바이트 단위로 표현된 문자를 원래의 값으로 변환시킨뒤 메모장 'h'라는 문자를 보이도록 하는 것이다.
즉, 입력/출력하는(InputStream / OutputStream) 동안에 컴퓨터들에게는 바이트 단위로 문자를 인식시키는것이다. 컴퓨터는 0과 1밖에 모르기 때문이다.
그리고 바이트 단위 → 문자형, 문자형 → 바이트 단위로 바꿔주는 것을 인코딩이라고 하며, 이 인코딩하는 다양한 방식들이 존재한다.
- 대표적으로 ASCII, Unicode, UTF-8 등이 있다.
- java에서 문자를 바이트 단위로 표현하기
예제 1) 문자와 숫자를 바이트 단위로 저장한 뒤 출력하기.
- package org.java.project;
- public class Onebyte{
- public static void main(String[] args) {
- byte byte_a = 'a';
- byte byte_b = 'b';
- byte byte_A = 'A';
- byte byte_B = 'B';
- byte byte_0 = '0';
- byte byte_9 = '9';
- System.out.println("문자 a를 바이트 단위로 표현 : " + byte_a);
- System.out.println("문자 b를 바이트 단위로 표현 : " + byte_b);
- System.out.print("\n");
- System.out.println("문자 A를 바이트 단위로 표현 : " + byte_A);
- System.out.println("문자 B를 바이트 단위로 표현 : " + byte_B);
- System.out.print("\n");
- System.out.println("숫자 0을 바이트 단위로 표현 : " + byte_0);
- System.out.println("숫자 9를 바이트 단위로 표현 : " + byte_9);
- }
- }
: 실행결과 인코딩방식은 ASCII이며, 문자와 숫자가 해당하는 ASCII코드표에 있는 값의 데이터를 출력한다. 그래서 숫자로 입력받은 값 byte_0과 byte_9는 사실 숫자가 아닌 문자 '0', 문자 '9'로 인식하여 아스키 코드표에 해당하는 값 0~9는 아스키코드표에서 48~57에 으로 저장한다.
0을 아스키코드값 : 48( 48 : 2진수 0011 0000으로 컴퓨터가 인식)
9를 아스키코드값 : 57( 57 : 2진수 0011 1001으로 컴퓨터가 인식)
예제 2) 한문자씩 바이트코드 데이터형의 배열에 저장한 뒤 출력방법 - 1
- package org.java.project3.hanbat;
- public class Onebyte{
- public static void main(String[] args) {
- String str = "Hello world";
- int j = 0;
- byte[] byte_str = new byte[str.length()]; // 문자열 갯수만큼 바이트코드로 인식함.
- // 문자열의 한문자씩 byte단위로 byte배열 byte_str에 저장하기.
- for(int i = 0; i < str.length(); i++)
- byte_str[i] = (byte)str.charAt(i); //바이트의 단위로 인식할 수 있게 형변환.
- // 자료형 문자, byte단위의 문자 비교하기
- for(byte value : byte_str)
- System.out.println(str.charAt(j++) + " : " + value);
- }
- }
예제 3) 문자열을 바이트코드로 인코딩한뒤 바이트코드를 문자열로 디코딩하기
- package org.java.project;
- public class Onebyte{
- public static void main(String[] args) {
- String Text = "Hello World";
- byte[] byteText = Text.getBytes(); // 문자열을 바이트코드로 변환시켜서 배열 하나하나에 저장시킴.
- System.out.println("---문자열과, 바이트코드로 인코딩한 결과---");
- System.out.println("Text : " + Text);
- System.out.println("byte_Text : " + byteText); // 바이트코드로 인코딩한 배열의 주소를 출력하고있음.
- System.out.println("byte_Text.toString() : " + byteText.toString());
- System.out.println("\r---문자를 바이트코드로 표현한 결과---");
- for(int i=0; i<Text.length(); i++)
- System.out.println("Character [" + Text.charAt(i) + "] To ASCII Code : " + byteText[i]);
- String byteToText = new String(byteText);
- System.out.println("\r---바이트코드에서 문자열로 디코딩한 결과---");
- System.out.println(byteToText);
- }
- }
이로써 자바에서는 문자에서 바이트코드로 인코딩할때 8bit로 2의 7승까지 표현 할 수 있는 ASCII방식을 사용한다는 것을 살펴보았다.
댓글 없음:
댓글 쓰기