1. 파일과 스트림

java.io 패키지에 있는 스트림을 지원하는 클래스의 분류

원래 Stream은 Byte 단위로 핸들하는 것을 기본으로 한다. 문자도 내부적으로는 Byte 단위로 되어 있으며, 프로그램에서 문자를 사용할 때는 적절한 문자 인코딩으로 변환해서 사용해야 한다.

그런데 운영체제별로 고유한 문자표현방식이 다르다.

귀찮은 인코딩을 해야하는 불편을 해소하기 위해서 Stream 차원에서 문자를 처리해주는 문자 Stream을 제공하고 있다.

정리하자면, Stream을 Byte로 핸들하느냐 문자로 핸들하느냐에 따라서 두 가지 종류로 나눌 수 있다.

바이트 스트림

바이트 스트림

문자 스트림

문자 스트림

2. 바이트 스트림

입출력 단위가 바이트(8비트)

파일 입출력을 담당하는 바이트 스트림 - FileInputStream, FileOutputStream

public class CopyFile1 {
	public static void main(String[] args) throws IOException {
		FileInputStream in = null;
		FileOutputStream out = null;
		
		try {
			in = new FileInputStream("input.txt");
			out = new FileOutputStream("output.txt");
			int c;
			
			while((c = inputStream.read()) != -1)
				out.write(c);
		} finally { //스트림 닫기
			if(in!=null) in.close();
			if(out!=null) out.close();
		}
	}
}
public class CopyFile1 {
	public static void main(String[] args) throws IOException {
		
		try (FileInputStream in = new FileInputStream("input.txt");
			FileOutputStream out = new FileOutputStream("output.txt")){
			int c;
			
			while((c = inputStream.read()) != -1)
				out.write(c);
		}
	}
}

윈도우에서 EoF는 Ctrl-Z, 리눅스나 유닉스에서는 Ctrl-D를 사용하는데 이 값을 -1로 표현해뒀다.

read()를 하다가 EoF일 때 리턴값은 -1이 된다.

3. 문자 스트림

입출력 단위가 문자