Java

2024.05.14 Java 유용한 클래스 자바 I/O 개론

정훈5 2024. 5. 14. 09:35

자바 I/O (입력, 출력)

(메모리 상에 있는 데이터를 파일에다가 저장) --> 전원이 꺼져도 영속성(영구적으로 사라지지 않음) --> DB

파일 처리 개념 (스트림)

소켓 --> 소켓 통신 --> http 통신 --> 백엔드 개발자


자바 I/O (입출력)는 데이터를 읽고 쓰는 기능을 말하며, 파일, 네트워크, 다른 프로그램 등 다양한 소스와 대상으로부터
데이터를 주고받는 데 사용됩니다. 자바의 I/O 시스템은 크게 네 가지 주요 구성 요소로 나눌 수 있습니다:
바이트 기반 스트림, 문자 기반 스트림, 버퍼링 스트림, 그리고 고수준의 스트림으로 분류할 수 있습니다.

 

사전 기반 지식

Stream 이라는 단어에 대해서 먼저 살펴 보자.
스트림(Stream)데이터순차적으로 처리하는 일련의 연속된 데이터 요소입니다.
자바에서 스트림데이터흐름을 읽고 쓰는 데 사용되는 추상적인 개념으로, 입출력 작업을 수행할 때
데이터를 한 곳에서 다른 곳으로 이동시키는 매개체 역할
을 합니다.

 

 

 

java.io 패키지

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

 

자바에서 "스트림"이라는 용어는 두 가지 맥락에서 사용됩니다.
하나는 I/O에 관련된 데이터 흐름을 처리하는 스트림이며, 또 다른 하나는 자바 8 이후에 도입된
java.util.stream
패키지에 포함된 스트림 API입니다.

 

 

바이트 기반 스트림

InputStream / OutputStream
이 클래스들은 데이터를 바이트 단위로 읽고 쓰는 기본적인 기능을 제공합니다.
예를 들어, FileInputStream과 FileOutputStream은 파일로부터 바이트를 읽거나 파일에 바이트를 쓰는 데 사용됩니다.

 

문자 기반 스트림

Reader / Writer
바이트 기반 스트림과 달리, 문자 기반 스트림은 문자 데이터의 입출력을 처리합니다.
이것은 인코딩 문제를 자동으로 처리하기 때문에 텍스트 데이터를 다룰 때 특히 유용합니다.
FileReader와 FileWriter는 텍스트 파일을 읽고 쓸 때 사용됩니다.

 

버퍼링 스트림

BufferedInputStream / BufferedOutputStream / BufferedReader / BufferedWriter
이 스트림들은 입출력 효율을 증가시키기 위해 내부적으로 버퍼를 사용합니다.
버퍼링 스트림은 데이터를 일정량 모아 놓았다가 한 번에 처리하기 때문에
많은 작은 입출력 연산이 필요할 때 성능을 향상시킬 수 있습니다.

 

고수준의 스트림

DataInputStream / DataOutputStream
스트림들은 자바의 기본 데이터 타입을 쉽게 읽고 쓸 수 있게 해 줍니다.
예를 들어, 정수, 실수 등을 데이터 소스로부터 직접 읽거나 쓸 수 있습니다.

 

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

 

 

 

스트림의 두 가지 주요 특성

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

 

순차적 접근

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

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