티스토리 뷰

Java

Java(I/O 개론)

yoooon1212 2024. 5. 19. 18:54

자바 I/O(입출력)는 데이터를 읽고 쓰는 기능을 말합니다.

파일, 네트워크, 다른 프로그램 등 다양한 소스와 대상으로부터 데이터를 주고받는 데 사용됩니다. 

자바의 I/O 시스템(4가지): 바이트 기반 스트림, 문자 기반 스트림, 버퍼링 스트림, 고수준의 스트림

 

스트림(stream)이란
데이터를 순차적으로 처리하는 일련의 연속된 데이터 요소들이다.
데이터의 흐름을 읽고 쓰는 데 사용되는 추상적인 개념이다.
입출력 작업을 수행할 때 데이터를 한 곳에서 다른 곳으로 이동시키는 매개체 역할을 한다.

 

( 바이트들의 연속적인 흐름)

 

java.io 패키지
자바 I/O의 스트림 API에는 실제로 여러 인터페이스와 추상 클래스가 정의되어 있습니다.
자바에서 "Stream"이라는 용어는 두 가지 맥락에서 사용됩니다. 하나는 I/O에 관련된 데이터 흐름을 처리하는 스트림이며, 또 다른 하나는 자바 8 이후에 도입된 java.util.stream 패키지에 포함된 스트림 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) 구조와 유사하다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함