728x90
현대의 컴퓨터는 대부분 byte 단위로 데이터를 주고 받는다. 참고로 bit 단위는 너무 작기 때문에 byte 단위를 기본으로 사용한다. 자바 내부에 있는 데이터를 외부에 있는 파일에 저장하거나, 네트워크를 통해 전송하거나 콘솔에 출력할 때 모두 byte 단위로 데이터를 주고 받는다.
스트림을 사용하면 파일을 사용하든, 소켓을 통해 네트워크를 사용하든 모두 일관된 방식으로 데이터를 주고 받을 수 있다. 그리고 수 많은 기본 구현 클래스들도 제공한다.
InputStream, OutputStream 이 다양한 스트림들을 추상화하고 기본 기능에 대한 표준을 잡아둔 덕분에 개발자는 편리하게 입출력 작업을 수행할 수 있다. 이러한 추상화의 장점은 다음과 같다.
- 일관성 : 모든 종류의 입출력 작업에 대해 동일한 인터페이스(여기서는 부모의 메서드)를 사용할 수 있어, 코드의 일관성이 유지된다.
- 유연성 : 실제 데이터 소스나 목적지가 무엇인지에 관계없이 동일한 방식으로 코드를 작성할 수 있다. 예를 들어, 파일, 네트워크, 메모리 등 다양한 소스에 대해 동일한 메서드를 사용할 수 있다.
- 확장성 : 새로운 유형의 입출력 스트림을 쉽게 추가할 수 있다.
- 재사용성 : 다양한 스트림 클래스들을 조합하여 복잡한 입출력 작업을 수행할 수 있다. 예를 들어 BufferedInputStream 을 사용하여 성능을 향상시키거나, DataInputStream 을 사용하여 기본 데이터 타입을 쉽게 읽을 수 있다. 이 부분은 뒤에서 설명한다.
- 예외처리 : 표준화된 예외 처리 메커니즘을 통해 일관된 방식으로 오류를 처리할 수 있다.
- 스트림의 종류
- 스트림은 크게 바이트 기반 스트림과 문자 기반 스트림으로 나뉜다.
- 바이트 기반 스트림: InputStream, OutputStream을 상속받아 바이너리 데이터를 처리 (예: 이미지, 영상).
- 문자 기반 스트림: Reader, Writer를 상속받아 텍스트 데이터를 처리 (예: 텍스트 파일, 문자열).
- 바이트 기반 스트림은 1바이트 단위로 데이터를 처리하고, 문자 기반 스트림은 유니코드(2바이트 이상) 처리를 지원.
- 스트림은 크게 바이트 기반 스트림과 문자 기반 스트림으로 나뉜다.
- 스트림 체이닝(Stream Chaining)
- 여러 스트림을 조합하여 사용할 수 있다.
- 예를 들어, BufferedInputStream을 FileInputStream과 함께 사용하여 파일 입력 성능을 높이거나, DataInputStream을 추가하여 데이터를 특정 형식으로 읽을 수 있다.
- 스트림을 활용한 네트워크 통신
- 스트림은 소켓 프로그래밍에서 클라이언트-서버 간 데이터 송수신에도 사용된다.
- 입출력 작업의 효율성
- BufferedInputStream, BufferedOutputStream과 같은 버퍼를 사용하는 클래스는 입출력 성능을 크게 향상시킬 수 있다.
- 버퍼를 사용하지 않을 경우, 매번 물리적 장치에 접근하므로 성능이 저하될 수 있다.
- 자바의 표준 스트림
- 표준 입출력 스트림: System.in, System.out, System.err.
728x90
'컴퓨터 네트워크' 카테고리의 다른 글
Network program (0) | 2024.12.24 |
---|---|
네트워크 - 기본 이론 (1) | 2024.12.24 |
컴퓨터 네트워크 4장- 라우터 내부 (0) | 2024.05.18 |
컴퓨터 네트워크 4장- 네트워크 계층 개요 (0) | 2024.05.18 |
컴퓨터 네트워크 3장- 혼잡제어 (0) | 2024.04.21 |