- Stream이란
- Console에서의 입출력 방식(운영체제 입출력)
- System.in, System.out, Scanner
- Byte, Character 기반 스트림 - UTF-8 or 16
- 기타 보조 Stream
- File 입출력
- Network 입출력
한줄기로 쭈욱 끝없이 이어진 data 줄기
가래떡 뽑는 기계는
얼만큼 크게 뽑을지의 규격,
어떤 재료를 사용할것인지 등을 고려하여
기계 설정을 다르게 합니다.
마찬가지로 Java에서도 Stream의 종류에 따라 Stream(입출력 대상)의 여러 통로들을 만들어놓았습니다.
Stream의 기능을 보완 및 추가하기 위해 디자인 패턴의 데코레이터 패턴으로 생성자에 Stream을 추가하여 보조 Stream 클래스들을 구현해놓았습니다.
위 그림과 같이 감싼다는 형식으로 이해하면 좋습니다.
다음과 같은 특징을 가지고 있습니다.
이 모든것은 Java Application 혼자서 해결할 수 없고, 운영체제의 API를 이용해야 합니다.
데이터가 들어오고 나가는 통로
의 역할에 대해 규정해 놓은 추상클래스
들에 따라서
입출력 대상
에 따라 통로를 각각 구현한 인스턴스
들로 이루어져 있습니다.
java.io
패키지를 통해 제공되고 있습니다.
InputStream
, OutputStream
의 추상클래스를 각각 대상에 따라 구현한 객체들이 있습니다.
FileOutputStream
: File 입출력ByteArrayOutputStream
: Byte배열 Memory 입출력PipedOutputStream
: Process간 통신AudioInputStream
: 오디오 장치 입출력다음은 메서드입니다.
abstract int read()
abstract void write(int b)
이렇게 주로 읽기와 쓰기 메서드를 가지고 있습니다.
(read 타입이 byte
가 아닌 int
인 이유는 byte범위인 0~255와 -1이기 때문입니다.)
오로지 스트림의 기능을 보완하기 위한 용도로 쓰입니다.
보조 스트림 자체에는 입출력 기능이 존재하지 않습니다.
FilterInputStream
라는 추상클래스를 구현한 구현체들입니다.
BufferdInputStream
DataInputStream
PushbackInputStream
LineNumberInputStream
hello.txt
를 읽으려 할 때,
FileInputStream
을 이용하여
FileInputStream f = new FileInputStream("hello.txt");
로 할 수 있으나 성능을 조금 더 향상시키고자
BufferedInputStream b = new BufferedInputStream(f);
b.read();
Buffer를 이용하여 입출력을 할 수 있게 되었습니다.
운영체제 API를 한번씩 호출하는 것 보다 Buffer를 사용함으로써 한번에 호출해서 가져오는 방식을 사용합니다.
이로써 운영체제 자원을 덜 사용함으로써 실행속도 면에서 이득을 가져올 수 있습니다.
이는 기반 스트림인 FileInputStream을 이용하여 보조스트림을 만듬으로써
실질적으로 입출력은 FileInputStream이 수행하고 BufferedInputStream
은 Buffer만을 제공합니다.
자바의 시스템 기본 표준으로 정의한 입출력 클래스입니다.
이들은 전부 Character단위가 아닌 Byte단위의 Stream입니다.
System.in
System.out
System.err
System Class는 운영체제의 일부 기능(I/O나 프로그램 종료(exit, kill..), 시간 읽기 등)을 사용할 수 있게 해줍니다.
class System {
final static InputStream in;
final static PrintStream out;
final static PrintStream err;
...
static long currentTimeMillis()
public static Console console()
static void exit(int status)
...
}
이중에서 in, out, err를 이용하여 입출력을 할 수 있습니다.
Exploring JAVA - 8. Input/Output Facilities
위키백과 - 표준 스트림
키보드로 입력한 값이 콘솔로 출력될 때까지
자바 [JAVA] - 스캐너(Scanner) 클래스와 입력
[JAVA] File I/O(Input/Output)기초(파일 입출력 스트림에 대한 이해)
Jinnie Park - [JAVA스터디]자바 입출력(1)-System,Stream,표준입출력,객체입출력