[JAVA] 정리/파일(file)

파일(file) - 6. 텍스트 입출력_기본 지식

쎈코 2023. 2. 27. 23:29

1. 텍스트 입출력(수업 때 배우는 것)
- 메모장
- 응용 프로그램 <-> (데이터) <-> 보조기억장치


2. 비텍스트 입출력
- 그림판(이미지 데이터 출력)
- 동영상 플레이어(영상 데이터 출력)
- 음악 플레이어(소리 데이터 출력)

저장 장치
- 하드디스크는 데이터를 1, 0으로 저장함
- 데이터 자료형 존재(X) > 모든 걸 문자열로 저장 > 물리적으로는 문자 코드로 변환해서 저장
  (저장된 데이터에 이전 언어의 흔적이 묻어있으면 다른 데이터가 왔을때 이해를 못하게 됨)
  (우리가 쓰는 프로그램은 그 어떤 언어와 호환되지 않고 독립적, 자체적으로 존재)
  
인코딩, Encoding
- 문자 코드(우리가 사용하는 데이터_응용 프로그램 데이터)를 부호화(1, 0) 시키는 작업
- 어떤 하나의 플랫폼(자바 환경 등)에 있는 데이터를 
- 자바 프로그램에서 사용하던 "홍길동" 같은 파일들을 하드디스크에 저장하기 위해 텍스트파일(100100100010) 등으로 변환 시키는 작업



디코딩, Decoding
- 부호화 된 데이터를 문자 코드로 다시 변환하는 작업(복호화)
- 텍스트파일(100100100010) > 자바 프로그램("홍길동")


자바랑 하드디스크는 데이터를 저장하는 방식이 별개임


인코딩/디코딩 규칙(3종류라고 생각)
1. ANSI
4. ISO-8859-1
5. EUC-KR
6. MS949
-> 이 4개가 우리나라 입장에서는 성격이 똑같음(한글 데이터 조작 시 구분 없음)
------------------------------------------------------------
2. UTF-8
------------------------------------------------------------
3. UTF-16



(★★★) 
ANSI(미국 표준)
- 영어(서유럽 문자, 숫자, 특수문자, 제어문자 등): 1byte (3칸 길이)
- 한글(일본어, 한자 등) : 2byte (6칸 길이)

 

(★★★) 
UTF-8(거의 국제 표준). 자바, 오라클 > UTF-8을 쓰도록 기본환경 설정됨
- 영어: 1byte (3칸 길이)
- 한글: 3byte (9칸 길이)

UTF-16
- 영어: 2byte (6칸 길이)
- 한글: 2byte (6칸 길이)

어떤 방식을 선택하든 자유
그러나 UTF-8을 반 강제적으로 사용해야 함(거의 국제 표준 수준이기 때문)


만약 UTF-8로 한글 데이터 100MB를 저장하면
같은 데이터를 ANSI로 저장하면 2/3 수준으로 줄어들음
- UTP-8은 한글이 3byte, ANSI는 2byte이기 때문

ANSI(한글 2byte)로 한글 데이터를 작성했는데 다른 사람이 UTF-8(한글 3byte)로 읽을 시 한글이 깨짐
저장할 때 사용한 byte와 읽을 때 사용한 byte가 다르면 무조건 깨짐

영어도 ANSI(영어 1byte)로 작성했는데 UTP-16(2byte)로 읽으면 또 무조건 깨짐

읽을때 규칙 = 쓸 때 규칙 이어야 함

그런데 혹시라도 byte가 어긋났을 시 인코딩/디코딩 처리를 해줘야 함