[JAVA]IO 데이터입출력

신동혁·2022년 8월 12일
0

JAVA

목록 보기
5/16

데이터입출력( 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();
			}

		}

	}
profile
개발취준생

0개의 댓글