Java데이터입출력
데이터입출력( IO )
콘솔창 지정 코드 : System.out
키보드 지정 코드 : System.in
- 바이트단위로 읽기
1byte read API : ~InputStream
1byte write API : ~OutputStream
2byte read API : ~Reader
2byte write API : ~Writer -
1byte에서 2byte 형식으로 변경시 API로 변환작업 필수(InputStreamReader API같은 것을 사용한다.)
- 라인단위로 읽기
- BufferedReader : 하드디스크의 버퍼메모리를 이용한 데이터입력 방식이다. 버퍼는 하드디스크(HDD)와 서버메모리(RAM) 사이에 존재하는 임시 저장공간이고, BufferedReader는 java에서 제공하는 데이터입력 방식인 Scanner와 달리( Scanner는 키보드 입력을 즉시 전달함 ) 버퍼에 내용을 모아서 저장했다가 한번에 전달하는 방식이다. 이렇게 한번에 모았다가 전달하는 이유는 하드디스크의 속도가 매우 느린편이므로 하드디스크와의 소통을 최대한 줄이기 위함이다.
- readLine()
특징
데이터를 라인 단위로 읽는다.
엔터를 경계로 받아들인다.(공백은 경계로 X)
String타입으로 반환한다.
예외처리가 필수다.
public void m1() {
// Step01. 가장 기초적인 입력법 : 글자 하나하나 읽기
InputStreamReader in = new InputStreamReader(System.in);
try {
System.out.println(in.read()); // read라는 메서드 사용할 때 try,catch가 꼭 필요.. 에러생길수있으므로
} catch (IOException e) {
e.printStackTrace();
}
}
// Step02. line단위로 read해서 한번에 출력 기능으로 확장
public void m2() {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try {
String data = in.readLine(); // Line단위 읽기
while (data != null) {
System.out.println(data);
data = in.readLine();
}
// while문 짧게 변형시켜봄
while ((data = in.readLine()) != null) {
System.out.println(data);
}
} catch (IOException e) {
e.printStackTrace();
} finally { // try cath문장의 옵션인데 : 예외 발생 여부와 무관하게 100퍼센트 실행 보장하는 부분
// 의미만 보면 finally전체를 없에고 그냥 in.close()... 이렇게해줘도되는데
// 안정성을 위해서 이런식으로 처리하는 것임.
try {// 근데 이 문장도 try catch 처리 해줘야 함
in.close();
in = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}