스트림

Updated:

강의 사이트

http://tcpschool.com/

스트림

1. 스트림

  • 자바에서는 파일이나 콘솔의 입출력을 직접 다루지 않고, 스트림(stream)이라는 흐름을 통해 다룬다.
  • 스트림이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미
  • 즉, 스트림은 운영체제에 의해 생성되는 가상의 연결 고리를 의미하며, 중간 매개자 역할

  • 자바 SE 8에 추가된 스트림 API와 다른 개념

2. 입출력 스트림

  • 스트림은 한 방향으로만 통신할 수 있으므로, 입력과 출력을 동시에 처리할 수는 없다.
  • 따라서 입력 스트림, 출력 스트림으로 구분
  • 자바에서는 java.io 패키지를 통해 InputStream과 OutputStream 클래스를 별도로 제공
  • 자바에서의 스트림 생성이란 이러한 스트림 클래스 타입의 인스턴스를 생성한다는 의미

  • InputStream 클래스에는 read() 메소드가, OutputStream 클래스에는 write() 메소드가 각각 추상 메소드로 포함
클래스 메소드 설명
InputStream abstract int read() 입력 스트림으로부터 다음 바이트를 읽어들임.
  int read(byte[] b) 입력 스트림으로부터 특정 바이트를 읽어들인 후,
배열 b에 저장함.
  int read(byte[] b, int off, int len) 입력 스트림으로부터 len 바이트를 읽어들인 후,
배열 b[off]부터 저장함.
OutputStream abstract void write(int b) 출력 스트림에 특정 바이트를 저장함.
  void write(byte[] b) 배열 b의 특정 바이트를 배열 b의 길이만큼 출력 스트림에 저장함.
  void write(byte[] b, int off, int len) 배열 b[off]부터 len 바이트를 출력 스트림에 저장함.

3. 바이트 기반 스트림

  • 자바에서 스트림은 기본적으로 바이트 단위로 데이터를 전송
입력 스트림 출력 스트림 입출력 대상
FileInputStream FileOutputStream 파일
ByteArrayInputStream ByteArrayOutputStream 메모리
PipedInputStream PipedOutputStream 프로세스
AudioInputStream AudioOutputStream 오디오 장치

4. 보조 스트림

  • 자바에서 제공하는 보조 스트림은 실제로 데이터를 주고받을 수는 없지만, 다른 스트림의 기능을 향상시키거나 새로운 기능을 추가해 주는 스트림
입력 스트림 출력 스트림 설명
FilterInputStream FilterOutputStream 필터를 이용한 입출력
BufferedInputStream BufferedOutputStream 버퍼를 이용한 입출력
DataInputStream DataOutputStream 입출력 스트림으로부터 자바의 기본 타입으로 데이터를 읽어올 수 있게 함.
ObjectInputStream ObjectOutputStream 데이터를 객체 단위로 읽거나, 읽어 들인 객체를 역직렬화시킴.
SequenceInputStream X 두 개의 입력 스트림을 논리적으로 연결함.
PushbackInputStream X 다른 입력 스트림에 버퍼를 이용하여 push back이나 unread와 같은 기능을 추가함.
X PrintStream 다른 출력 스트림에 버퍼를 이용하여 다양한 데이터를 출력하기 위한 기능을 추가함.

5. 문자 기반 스트림

  • 자바에서 스트림은 기본적으로 바이트 단위로 데이터를 전송
  • 하지만 자바에서 가장 작은 타입인 char 형이 2바이트이므로, 1바이트씩 전송되는 바이트 기반 스트림으로는 원활한 처리가 힘든 경우가 있다.
  • 따라서 자바에서는 바이트 기반 스트림뿐만 아니라 문자 기반의 스트림도 별도로 제공
  • 이러한 문자 기반 스트림은 기존의 바이트 기반 스트림에서 InputStream을 Reader로, OutputStream을 Writer로 변경하면 사용할 수 있다.
입력 스트림 출력 스트림 입출력 대상
FileReader FileWriter 파일
CharArrayReader CharArrayWriter 메모리
PipedReader PipedWriter 프로세스
StringReader StringWriter 문자열
  • 문자 기반 보조 스트림
입력 스트림 출력 스트림 설명
FilterReader FilterWriter 필터를 이용한 입출력
BufferedReader BufferedWriter 버퍼를 이용한 입출력
PushbackReader X 다른 입력 스트림에 버퍼를 이용하여 push back이나 unread와 같은 기능을 추가함.
X PrintWriter 다른 출력 스트림에 버퍼를 이용하여 다양한 데이터를 출력하기 위한 기능을 추가함.

파일 입출력

1. 표준 입출력

  • 자바에서는 콘솔과 같은 표준 입출력 장치를 위해 System이라는 표준 입출력 클래스를 정의
클래스 변수 입출력 스트림 설명
System.in InputStream 콘솔로부터 데이터를 입력받음.
System.out PrintStream 콘솔로 데이터를 출력함.
System.err PrintStream 콘솔로 데이터를 출력함.

2. File 클래스

  • 자바는 이러한 입출력 작업 이외의 파일과 디렉터리에 관한 작업을 File 클래스를 통해 처리
메소드 설명
boolean canRead() 해당 파일이 읽을 수 있는 파일인지를 검사함.
boolean canWrite() 해당 파일이 쓸 수 있는 파일인지를 검사함.
boolean delete() 해당 파일 또는 디렉터리를 삭제함.
boolean exists() 해당 파일이 존재하는지를 검사함.
String getPath() 해당 파일의 경로명을 문자열로 반환함.
boolean isAbsolute() 해당 파일의 경로명이 절대 경로인지를 검사함.
boolean isDirectory() 해당 파일이 디렉터리인지를 검사함.
boolean isFile() 해당 파일이 파일인지를 검사함.
long length() 해당 파일의 크기를 반환함.
boolean mkdir() 지정된 경로에 디렉터리를 생성함.
boolean mkdirs() 지정된 경로에 디렉터리를 생성하며,
필요한 모든 상위 디렉터리도 생성함.
boolean renameTo(File dest) 해당 파일의 이름을 전달된 파일 이름으로 변경함.
boolean setExecutable(boolean executable)
boolean setReadable(boolean readable)
boolean setWritable(boolean writable)
boolean setReadOnly()
해당 파일의 속성을 변경함.

Tags:

Categories:

Updated: