(Java)입출력 스트림과 파일 입출력

FileInputStream

read() 메소드에 대한 두 가지 정리

fin = new FileInputStream("/home/hxperl/Notebooks/Notes/test.out");

int c = 0;
while((c = fin.read()) != -1) {
System.out.print(c + " ");
}
fin.close();
  1. read()는 한 바이트나 한 문자를 리턴하므로, 리턴 타입이 byte 혹은 char 인 것이 합당한데 int로 선언한 이유?
  2. read()가 스트림의 끝 혹은 파일의 끝을 만나면 -1을 리턴하는데, 스트림이나 파일 중간에 -1이 있다면 어떻게 구분?

해답은 모두 스트림 혹은 파일의 끝 처리와 연관되어 있다.

만일 스트림이나 파일에 0xFF 값이 있다고 하면, read()는 0xFF를 리턴한다. 0xFF를 -1 이라고 생각 할수 도 있지만 read()는 int 타입으로 리턴하므로 0xFF를 32비트의 0x000000FF로 리턴한다. 이것은 -1이 아니다. int타입의 -1은 0xFFFFFFFF이다. 이것이 read()의 리턴 타입이 int인 이유이다.