728x90

입출력 스트림이란

네트워크에서 자료의 흐름이 물과 같다는 데에서 유래했으며

다양한 입출력 장치에 일관된 입출력 방식을 제공하는 것이다.

 

입출력 스트림의 기준

I/O 대상 기준 : 입력 스트림, 출력 스트림

자료의 종류 : 바이트 스트림, 문자 스트림

스트림의 기능 : 기반 스트림, 보조 스트림

 

입력 스트림과 출력 스트림

입력 스트림 : 대상으로부터 자료를 읽는 스트림

출력 스트림 : 대상에게 자료를 출력하는 스트림

입출력 스트림의 예시

 

바이트 스트림과 문자 스트림

바이트 단위 스트림 : 바이트 단위로 자료를 읽고 쓴다.

문자 단위 스트림 : 문자는 2바이트씩 처리

바이트/문자 스트림 예시

 

기반 스트림과 보조 스트림

기반 스트림 : 대상에 직접 자료를 읽고 쓰는 스트림

보조 스트림 : 직접 읽고 쓰는 기능은 없으나, 추가적인 기능을 제공하는 스트림

기반/보조 스트림 예시


표준 입출력

System 클래스

System.out : 표준 출력 스트림

System.in : 표준 입력 스트림 -> 한 바이트 씩 읽어들인다. 한글과 같은 여러 바이트를 읽으려면 보조 스트림 사용

System.err : 표준 에러 스트림

 

Scanner 클래스

java.util 패키지에 있는 클래스

문자, 정수, 실수 등 다양한 자료형 읽을 수 있다.

 

Console 클래스

System.in을 사용하지 않고 콘솔에서 표준 입출력 가능

이클립스와는 연동되지 않는다.

 


바이트 단위 입출력 스트림

InputStream : 바이트 단위 입력 스트림 최상위 클래스
OutputStream : 바이트 단위 출력 스트림 최상위 클래스

 

File 입출력

FileInputStream, FileOutputStream

입력 스트림은 입력 파일이 없는 경우 예외 발생

출력 스트림은 출력 파일이 없으면 생성한다.

 

flush() : 출력용 버퍼를 비울 때 사용

close() : 파일 스트림을 닫기위한 메소드, 사용시 자동으로 flush() 호출

 

문자 단위 입출력 스트림

Reader : 문자 단위 입력 스트림 최상위 클래스

Writer : 문자 단위 출력 스트림 최상위 클래스

 

File 입출력

FileReader, FileWriter 사용

 


보조 스트림

실제로 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림

FileInputStream과 FileOutputStream이 보조스트림의 상위 클래스이다.

생성자의 매개변수로 다른 스트림을 가진다.

보조 스트림의 생성자 예시

보조 스트림 종류

Buffered 스트림 : 내부에 8192 바이트 크기의 배열을 가지고 있어서 읽고 쓸 때 속도가 빠르다.

DataInputStream / DataoutputStream : 자료가 저장된 상태 그대로 자료형을 유지해서 읽거나 쓰는 기능을 제공하는 스트림이다.

 


직렬화(Serialization)

인스턴스의 상태를 그대로 저장하거나 전송하고 이를 그대로 복원하는 방식

ObjectInputStream / ObjectOutputStream을 사용하는 보조 스트림이다.

 

직렬화는 인스턴스의 내용이 외부로 유출되는 것이기 때문에 직렬화 가능 여부를 명시해야 한다.

구현할 코드는 없는 mark interface로 Serializable 인터페이스를 표시해야한다.

Serializable 표시

Externalizable 인터페이스

구현할 메소드가 있는 인터페이스로 프로그래머가 직접 입,출력 방식을 구현해야한다.


그 외 입출력 클래스

File 클래스

파일 개념을 추상화한 클래스

입출력 개념은 없고 파일의 이름, 경로, 속성 등을 알 수 있다.

 

RandomAccessFile 클래스

입출력 클래스 중 유일하게 파일 입출력을 동시에 할 수 있다.

파일 포인터가 있어서 직접 읽고 쓸 위치를 이동할 수 있다.

다양한 자료형에 대한 메소드가 제공된다.


데코레이터 패턴

자바의 입출력은 실제 입출력 기능을 제공하는 객체(컴포넌트)와 그 외 추가적인 기능을 제공하는 데코레이터(보조스트림)을 사용한다.

상속보다 유연한 확장성을 지니고 지속적인 서비스의 증가와 제거가 용이하다.

데코레이터 패턴

728x90

'프로그래밍 > Java' 카테고리의 다른 글

[Java] 자바 프로그램의 이해와 실행의 원리  (0) 2020.05.14
[Java] 쓰레드(Thread)  (0) 2020.02.12
[Java] 예외(Exception)  (0) 2020.02.08
[Java] 스트림(stream)  (0) 2020.02.06
[Java] 람다식  (0) 2020.02.06

+ Recent posts