목차
1. 파일 입출력 패키지
2. 데이터 저장 형식
파일 입출력 : binary 저장/읽기
바이너리(binary) 데이터 입출력
바이너리 : byte형식의 데이터
데이터 저장
순차적으로 저장하는것을 도와주는 class :
FileOutputStream
데이터 읽기
순차적으로 읽는것을 도와주는 class:
FileInputStream
FileOutputStream
FileInputStream
파일 입출력 시, 파일이 존재하지 않을 수 있다.
FileNotFoundException
=Checked Exception
= 반드시 명시적으로 체크해주어야 하는 예외
java.io.*
InputStream/OutputStream
: byte stream(byte, byte[])Reader/Writer
: character stream(char, char[])DataSinkStream
: 데이터 저장소에 직접 읽기/쓰기를 수행하는 클래스data 저장소
파일 / 메모리 / 프로세스의 3 종류로 나뉜다.
DataProcessingStream
: 중간에서 데이터를 가공하는 일을 하는 클래스중간에서 데이터를 가공하는 일을 하는 클래스 : decorator
1 byte씩 바로 바로 HDD로 출력하는 것보다 일정량의 바이트들을 메모리에 모았다가 한 번에 출력하는 것이 시간이 덜 소요된다.
인스턴스를 통째로 입출력하기
= 인스턴스 필드의 값을 통째로 입출력하기
Serialize(직렬화)
와 Deserialize(역직렬화)
= 직렬화
= marshaling
= 역직렬화
= unmarshaling
직접 필드값을 출력하는 것보다 파일 크기가 더 커지는 단점이 있다.
장점 : 코딩이 쉽다.
단점 : 다른 프로그래밍 언어로 읽고 쓰기가 어렵다.
Comma Separated Values
클래스
텍스트 형식의 데이터 특징
바이너리 형식보다 파일 크기가 크다.
저장할 때 UTF-16 => UTF-8
로 인코딩
읽을 때 UTF-8 => UTF-16
로 디코딩
인코딩/디코딩에 시간소요
텍스트 편집기로 직접 변경 가능
바이너리 형식은 전용 App을 사용해야 한다.
프로그래밍 언어 간 호환이 잘 된다.
App끼리 데이터 교환이 쉽다.
FileReader
클래스의 readLine()
: 한 줄 단위로 문자열을 끊어서 리턴
CSV의 한계와 대안 형식
계층 구조의 데이터를 표현할 수 있고, 텍스트 형식으로 되어 있어,
OS나 프로그래밍 언어에 종속되지 않는 공개된 데이터 포맷 :
XML과 JSON 형식
eXtensible Markup Language
계층적인 구조의 데이터 표현이 가능하다.
= 데이터 조회 및 추출이 용이하다.
= App에서 데이터를 제어하기가 쉽다.
= 인간이 아닌 프로그램에서 데이터를 다루기 쉽다.
텍스트 형식이다.
프로그램끼리 데이터 교환이 용이하다.
XML의 단점
데이터보다 부가데이터가 더 클 수 있다.
= 파일크기가 매우 커진다.
자바스크립트에서 객체를 표현하는 문법을 차용하여 데이터를 표현하는 문법으로 만든 것.
{
"title":"---",
"descriptoin":"---",
"authors":[{"name":"---","email":"---","tel":"---"},
{"name":"---","email":"---","tel":"---"}],
"press":{"name":"---",
"homepage":"---",
"tel":"---"}
}
- 계통형 데이터 표현이 쉽다.
- 프로퍼티 명을 통해 데이터 의미를 표시한다.
= XML의 태그명 (XML보다 부가 데이터의 크기가 작다)- 텍스트 형식이다.
= XML보다 간결하다.
JSON형식으로의 파일입출력 과정
serialize (=encoding)
[객체] >> toJson() >> [Gson] >> 생성 >> [JSON 문자열]
deserialize (=decoding)
[객체] << fromJson() << [Gson] << 로딩 << [JSON 문자열]