상세 컨텐츠

본문 제목

[JAVA] 자바 I/O 개론

JAVA/Java 기초

by 미로910 2024. 5. 16. 11:47

본문

자바 I/O (입출력)

  • 데이터를 읽고 쓰는 기능
  • 파일, 네트워크, 다른 프로그램 등 다양한 소스와 대상으로부터 데이터를 주고 받는데 사용됨
  • 자바의 I/O 시스템은 크게 네 가지 주요 구성 요소로 나룰 수 있다

(바이트 기반 스트림, 문자 기반 스트림, 버퍼링 스트림 그리고 고수준의 스트림으로 분류할 수 있음)

 

💡  Stream 이라는 단어를 살펴보자

스트림(Stream)은 데이터를 순차적으로 처리하는 일련의 연속된 데이터 요소들이다. 
자바에서 스트림은 데이터의 흐름을 읽고 쓰는 데 사용되는 추상적인 개념으로, 입출력 작업을 수행할 때 데이터를 한 곳에서 다른 곳으로 이동시키는 매개체 역할을 한다.
주의!
자바에서 '스트림'이라는 용어는 두 가지 맥락에서 사용된다. 하나는 I/O에 관련된 데이터 흐름을 처리하는 스트림이며, 또 다른 하나는 자바 8 이후에 도입된 java.util.stream 패키지에 포함된 스트림 API이다.

 

java.io 패키지

💡 자바 I/O의 스트림 API에는 실제로 여러 인터페이스와 추상 클래스가 정의되어 있다.

 

1. 바이트 기반 스트림

  • InputStream / OutputStream : 이 클래스들은 데이터를 바이트 단위로 읽고 쓰는 기본적인 기능을 제공.

예를 들어, FileInputStream과 FileOutputStream은 파일로부터 바이트를 읽거나 파일에 바이트를 쓰는데 사용됨

 

2. 문자 기반 스트림

  • Reader / Writer : 바이트 기반 스트림과 달리, 문자 기반 스트림은 문자 데이터의 입출력을 처리함.

이것은 인코딩 문제를 자동으로 처리하기 때문에 텍스트 데이터를 다룰 때 특히 유용하다

FileReader와 FileWriter는 텍스트 파일을 읽고 쓸 때 사용된다.

 

3. 버퍼링 스트림

  • BufferedInputStream / BufferedOutputStream / BufferedReader / BufferedWriter : 이 스트림들은 입출력  효율을 증가시키기 위해 내부적으로 버퍼를 사용한다.

버퍼링 스트림은 데이터를 일정량 모아 놓았다가 한 번에 처리하기 때문에 많은 작은 입출력 연산이 필요할 때 성능을 향상 시킬 수 있다.

 

4. 고수준의 스트림

  • DataInputStream / DataOutputStream : 이 스트림은 자바의 기본 데이터 타입을 쉽게 읽고 쓸 수 있게 해준다.

예를 들어 정수, 실수 등을 데이터 소스로부터 직접 읽거나 쓸 수 있다.

  • ObjectInputStream / ObjectOutputStream : 객체 직렬화에 사용되며, 객체를 바이트 형태로 변환하거나 바이트에서 객체를 복원하는 기능을 제공한다.

 

 

스트림의 두 가지 주요 특성

1. 단방향성

스트림은 단방향으로만 데이터를 처리한다. 즉, 입력 스트림은 데이터를 읽는 데 사용되며, 출력 스트림은 데이터를 쓰는 데 사용된다. 두 작업을 동시에 수행하려면 입력 스트림과 출력 스트림을 별도로 사용해야 한다.

2. 순차적 접근

스트림은 데이터에 순차적으로 접근한다. 이는 스트림을 통해 데이터를 처리할 때, 한 번에 하나의 데이터 요소만 처리하며, 일반적으로 한 번 처리된 데이터 요소는 다시 되돌아갈 수 없다는 의미이다.(일부 스트림은 마킹 기능을 제공하여 이러한 제한을 일부 완화한다)

즉, 스트림은 먼저 보낸 데이터를 먼저 받는다. 또한 중간에 건너뜀 없이 연속적으로 데이터를 주고 받는다. 이 특성은 큐(Queue)의 FIFO(First In First Out) 구조와 유사하다.

'JAVA > Java 기초' 카테고리의 다른 글

[JAVA] Map 인터페이스  (0) 2024.05.16
[JAVA] 프레임워크(collection framework)  (0) 2024.05.16
[JAVA] LinkedList  (0) 2024.05.08
[JAVA] 큐(Queue)  (0) 2024.05.07
[JAVA]이미지 올리기  (0) 2024.04.29

관련글 더보기