상세 컨텐츠

본문 제목

자바 입출력

자바강좌

by somiyuralove 2019. 5. 10. 00:08

본문

I/O란 Input과 Output의 약자로 입력과 출력, 간단히 줄여서 입출력이라고 합니다.

입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고 받는 것을 말합니다.

* 스트림(stream)

자바에서 입출력을 수행하려면, 즉 어느 한쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데 이것을 스트림(stream)이라고 정의했습니다.

스트림이란 데이터를 운반하는데 사용되는 연결통로입니다.

스트림은 연속적인 데이터의 흐름을 물에 비유해서 붙여진 이름인데 여러 가지로 유사한 점이 많습니다.

물이 한쪽 방향으로만 흐르는 것과 같이 스트림은 단방향통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없습니다.

그래서 입력과 출력을 동시에 수행하려면 입력을 위한 입력스트림(input stream)과 출력을 위한 출력스트림(output stream), 모두 2개의 스트림이 필요합니다.

스트림은 먼저 보낸 데이터를 먼저 받게 되어 있으며 중간에 건너뜀 없이 연속적으로 데이터를 주고받습니다.

큐(queue)와 같은 FIFO(First In First Out)구조로 되어 있다고 생각하면 이해가 쉽습니다.

* 바이트기반 스트림 - InputStream, OutputStream

스트림은 바이트단위로 데이터를 전송하며 입출력 대상에 따라 다음과 같은 입출력스트림이 있습니다.

입력스트림

출력스트림

입출력 대상의 종류

FileInputStream

FileOutputStream

파일

ByteArrayInputStream

ByteArrayOutputStream

메모리(byte배열)

PipedInputStream

PipedOutputStream

프로세스(프로세스간의 통신)

AudioInputStream

AudioOutputStream

오디오장치

* 보조 스트림

위의 표에서 언급한 스트림 외에도 스트림의 기능을 보완하기 위한 보조스트림이 제공됩니다.

보조스트림은 실제 데이터를 주고받는 스트림이 아니기 때문에 데이터를 입출력할 수 있는 기능은 없지만, 스트림의 기능을 향상시키거나 새로운 기능을 추가할 수 있습니다. 그래서 보조스트림만으로는 입출력을 처리할 수 업고, 스트림을 먼저 생성한 다음에 이를 이용해서 보조스트림을 생성해야합니다.

* 문자기반 스트림 - Reader, Writer

지금까지 알아본 스트림은 모두 바이트기반의 스트림이었습니다. 바이트기반이라 함은 입출력의 단위가 1 byte라는 뜻입니다. 이미 알고 있는 것과 같이 C언어와 달리 Java에서는 한문자를 의미하는 char형이 1byte가 아니라 2byte이기 때문에 바이트기반의 스트림으로 2byte인 문자를 처리하는데 어려움이 있습니다.

이 점을 보완하기 위해서 문자기반의 스트림이 제공됩니다. 문자데이터를 입출력할 때는 바이트기반 스트림 대신 문자기반 스트림을 사용합시다.

* 바이트 기반 스트림

1. InputStream과 OutputStream

앞서 얘기한 바와 같이 InputStream과 OutputStream은 모드 바이트기반의 스트림의 조상입니다.

2. ByteArrayInputStream과 BytemArrayOutputStream

ByteArrayInputStream/ByteArrayOutputStream은 메모리, 즉 바이트배열에 데이터를 입출력 하는데 사용되는 스트림입니다. 즈로 다른 곳에 입출력하기 전에 데이터를 임시로 바이트배열에 담아서 변환 등의 작업을 하는데 사용됩니다.

그럼 아래 예제를 보시겠습니다.

* FileInputStream과 FileOutputStream

FileInputStream/FileOutputStream은 파일에 입출력을 하기 위한 스트림입니다.

그럼 예제를 보시겠습니다.

이 포스트가 도움이 되셨다면 공감버튼을 눌러주시길 바랍니다. ^^

'자바강좌' 카테고리의 다른 글

DataInputStream과 DataOutputStream  (0) 2019.06.30
바이트기반 보조스트림  (0) 2019.06.29
애플릿(Applet)  (0) 2019.05.09
AWT 그래픽 - paint(), Grphics,repaint(), Image  (3) 2019.05.08
AWT - 이벤트 처리(event handling)  (0) 2019.05.08

관련글 더보기

댓글 영역