JAVA < 입출력 프로그래밍 >

Zero·2022년 4월 2일
0

자바 IO

자바에서는 특정 장치와의 연결을 직접 담당하지 않고 스트림을 통해 입출력을 처리한다
기본적으로 java.io 패키지의 클래스들을 사용한다

  • 스트림은 입출력 장치와 자바 프로그램간의 연결 통로임
  • 단방향 이므로 입력 스트림과 출력 스트림을 별도로 사용해야 함
  • 연속된 데이터의 흐름으로 입출력 진행시 다른 작업을 할 수 없는 블로킹(Blocking) 상태가 됨
  • 입출력 대상을 변경하기 편하며 동일한 프로그램 구조를 유지할 수 있음
  • 문자 스트림과 바이트 스트림으로 구분

바이트 스트림(Byte Stream)

  • binary 데이터를 입출력하는 스트림
  • 데이터는 1바이트 단위로 처리됨
  • 이미지, 동영상등을 송수신할 때 사용
  • 주요 라이브러리는 InputStream, OutputStream 형태의 클래스 이름 사용

문자 스트림(Character Stream)

  • text 데이터를 입출력하는 스트림
  • 데이터는 2바이트 단위로 처리됨
  • 일반적인 텍스트 및 JSON , HTML 등을 송수신할 때 사용
  • 주요 라이브러리는 Reader , Writer 형태의 클래스 이름 사용

보조 스트림

보조 스트림은 FilterInputStreamFilterOutputStream을 상속받는 클래스들로 기본 스트림과 결합하여 특정 상황에서 보다 편리하게 사용 가능

  • BufferedInputStream/BufferedOutputStream : 버퍼를 사용해 입출력 효율과 편의를 위해 사용
  • BufferReader/BufferWriter : 라인 단위의 입출력이 편리함
  • InputStreamReader/OutputStreamReader : 바이트 스트림을 문자 스트림처럼 쓸 수 있도록하며 문자 인코딩 변환을 지원
  • DataInputStream/DataOutputStream : 자바 원시자료형 데이터 처리에 적합

  • 첫번째 실행은 기본 read() 메서드를 사용한 결과로 여러 글자를 입력해도 처음하나 출력
  • 영문의 경우 System.out.println()으로 출력시 아스키 코드 값이 출력됨
  • 한글의 경우 출력되지 않음
  • 두번째와 세번째 실행은 첫번째 실행 블럭을 주석처리하고 원래 주석처리된 코드의 주석을 제거하고 다시 실행
  • 세글자 까지 입력 내용이 출력되며 한글의 경우에도 정상 출력됨(UTF-8은 3바이트)
  • 입력내용을 모두 처리하려면 반복해서 읽도록 해야 하므로 처리가 불편

0개의 댓글