Skip to content

[java] 입출력과 스트림 #24

Description

@ddoddii

데이터 타입에 따른 스트림의 분류

입출력 스트림

  • 바이트 스트림 : 입력 바이트 스트림(InputStream), 출력 바이트 스트림(OutputStream)
  • 문자 스트림 : 입력 문자 스트림(Reader), 출력 문자 스트림(Writer)

스트림의 종류

  • 데이터 타입 : 바이트, 문자
  • 데이터 방향 : 입력, 출력
  • 노드의 종류 : 표준 입출력, 파일
  • 스트림의 성격: 노드 스트림/ 보조 스트림

바이트 스트림(Byte Stream)

  • 바이트 단위로 데이터를 입력받거나 출력하기 위한 스트림 클래스
  • 주로 이진파일(이미지,오디오,비디오..)를 읽고 쓰는데 사용
  • 최상위 추상 클래스 : InputStream, OutputStream
  • 노드의 종류에 따라 다양한 구체적인 서브 클래스 사용

InputStream 클래스

  • 모든 바이트 입력 스트림의 최상위 추상클래스
  • 바이트 단위로 데이터를 읽기 위한 여러 메서드를 제공
// 입력 스트림으로부터 한 바이트의 데이터를 읽음
int read() throws IOException
// 입력 스트림으로부터 데이터를 읽어서 주어진 바이트 배열 b를 채움 
int read(byte[] b) throws IOException
// 입력 스트림으로부터 주어진 바이트 배열b의 특정 오프셋off부터 최대 len 길이만큼 바이트를 읽음
int read(byte[] b, int off, int len) throws IOException
// 입력 스트림을 닫고 모든 시스템 자원을 해제 
void close() throws IOException

OutputStream 클래스

  • 모든 바이트 출력 스트림의 최상위 추상 클래스
  • 바이트 단위로 데이터를 출력하기 위한 여러 메서드 제공
void write(int b)  throws IOException
void write(byte[] b) throws IOException
void write(byte[] b, int off, int len) throws IOException
public void flush()
public void close()

보조 스트림

  • 스트림의 종류 : 노드 스트림, 보조 스트림
  • 노드 스트림(Node Stream)
    • 실제 노드에 연결
    • 데이터의 실제 입출력을 담당
  • 보조 스트림(Filter Stream)
    • 실제 노드에 연결되지 않음
    • 다른 스트림을 감싸서 추가적인 기능 (버퍼링, 데이터 형식 변환, 객체 직렬화)
    • 여러 보조 스트림을 체인 형태로 연결하여 다양한 기능을 조합할 수 있음
    • 노드 스트림 없이 단독으로 사용할 수 없음
    • 보조 스트림의 close()를 호출하면 노드 스트림의 close() 도 호출됨
  • 코테 TIP
  • 입력값이 1만줄 이상 : BufferedReader
  • 입력값 천줄 단위 : Scanner 써도 무방

객체 직렬화(Serialization) 가능 클래스 만들기

  • 객체가 ObjectOutputStream에 의해 직렬화되기 위해서는 해당 객체 클래스가 반드시 Serialization 인터페이스를 구현해야 함

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions