Skip to content

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

@ddoddii

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 인터페이스를 구현해야 함

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