쌍용교육센터 - 15일

개발자가 되고 싶어요 ㅣ 2024. 3. 8. 18:31

2024.03.08

입출력 스트림

스트림(Stream)이란?

데이터를 목적지로 입출력하기 위한 방법이다.

스트림에 데이터를 쓸 수 있고, 스트림에서 데이터를 읽을 수 있다.

스트림에 데이터를 쓸 경우, 이러한 스트림을 출력 스트림(output stream)이라고 한다.

스트림에서 데이터를 읽을 경우, 이러한 스트림을 입력 스트림(input stream)이라고 한다.

 

스트림의 특징

스트림FIFO 구조이다.

  • FIFO구조란 먼저 들어간 것이 먼저 나오는 형태로서 데이터의 순서가 바뀌지 않는다는 특징이 있다.

스트림단방향이다.

  • 자바에서 스트림은 읽기, 쓰기가 동시에 되지 않는다. 따라서 읽기, 쓰기가 필요하다면 읽는 스트림쓰는 스트림을 하나씩 열어 사용해야 한다.

스트림지연될 수 있다.

  • 스트림은 넣어진 데이터가 처리되기 전까지 스트림에 사용되는 스레드가 지연상태에 빠진다.

 

스트림의 분류

용도에 의한 분류

  • 1차 스트림: 디바이스에 직접 연결되는 스트림
  • 2차 스트림: 1차 스트림연결을 통해 디바이스에 연결되는 스트림

전송 방향에 의한 분류

  • 입력 스트림: 디바이스로부터 데이터를 읽어오는 스트림
  • 출력 스트림: 디바이스로 데이터를 출력하는 스트림

전송 단위에 의한 분류

  • 바이트스트림: 1Byte 단위로 입력, 출력하는 스트림
  • 문자스트림: 한 문자(2Byte)단위로 입력, 출력하는 스트림

보조 스트림

  • 스트림의 기능을 향상시키거나 새로운 기능을 추가시킨다.
  • 직접적인 데이터 입출력은 불가능하다.

 

File 클래스

시스템에 있는 파일이나 디렉토리추상화한 클래스이다.

File 클래스를 이용하면 파일의 크기, 생성, 삭제, 변경마지막 수정날짜 등 다양한 정보를 알 수 있는 메서드를 제공하고 있다.

 

바이트 스트림

바이트 스트림1byte를 입출력 할 수 있는 스트림이다.

일반적으로 바이트로 구성된 파일, 즉 동영상 파일, 이미지 파일, 음악 파일을 처리하기에 적합한 스트림이다.

 

바이트 스트림의 종류

InputStreamOutputStream으로 구성되어 있다.

 

바이트 입력 스트림(InputStream)

InputStream은 바이트 입력을 수행하는 데 필요한 메서드를 정의하는 추상 클래스이다. 자바 프로그램은 객체를 생성하고 생성된 객체바이트 스트림을 연결함으로써 파일을 연다. 연결된 세 개의 객체(System.in, System.out, System.err)를 생성한다. System.in 객체는 키보드로 바이트를 입력할 수 잇는 InputStream 객체이다.

 

바이트 출력 스트림(OutputStream)

OutputStream은 바이트 출력을 수행하는 필요한 메서드를 정의한 추상 클래스이다. 프로그램이 시작 되면 장치와 연결된 두 개의 출력 스트림은 System.out, System.err를 생성한다.

System.out 객체는 화면에 데이터를 출력 한다.

System.err 객체는 화면에 오류 메세지를 출력 한다.

 

문자 스트림

문자 스트림의 특징바이트 스트림에 추가하여 Reader와 Writer 클래스를 제공하는데, 이것은 2바이트를 입출력 할 수 있는 문자 기반 스트림이다.

바이트 스트림1바이트를 입출력하기 때문에 일반적으로 영문자로 구성된 파일, 동영상 파일, 음악 파일의 입출력 등에 적합한 스트림이다.

문자 스트림2바이트를 입출력하기 때문에 세계 모든 언어로 구성된 파일을 입출력 하기에 적합하다.

 

문자 스트림의 구조

문자 스트림은 Reader와 Writer로 나눈다.

문자 입력 스트림 - Reader

문자 출력 스트림 - Writer

 

객체의 직렬화

  • 직렬화(Serialization): 객체를 스트림으로 만드는 작업
  • 역직렬화(Deserialization): 스트림을 객체로 만드는 작업

 

Serializable

Serializable 인터페이스를 구현한 클래스를 작성하면 해당 클래스의 모든 멤버변수가 직렬화 대상이 된다.

객체가 스트림을 통해 직렬화 될 때는 객체에 있는 멤버변수가 직렬화 되는 것이다. 객체의 멤버변수 중에 직렬화 대상에 제외하고 싶다면 transient 키워드를 사용하면 된다.

'IT 국비 교육' 카테고리의 다른 글

쌍용교육센터 - 17일  (1) 2024.03.12
쌍용교육센터 - 16일  (0) 2024.03.11
쌍용교육센터 - 14일  (2) 2024.03.07
쌍용교육센터 - 13일  (1) 2024.03.06
쌍용교육센터 - 12일  (0) 2024.03.05