자바 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) 구조와 유사하다.
'Java' 카테고리의 다른 글
| 2024.05.14 Java 유용한 클래스 파일 입력 스트림(바이트 기반) (0) | 2024.05.14 |
|---|---|
| 2024.05.14 Java 유용한 클래스 표준 입출력이란? (0) | 2024.05.14 |
| 2024.05.14 Java 유용한 클래스 Inner class(중첩 클래스) (0) | 2024.05.14 |
| 2024.05.13 Data Structure(자료구조) Map 인터페이스 (0) | 2024.05.13 |
| 2024.05.13 Java 유용한 클래스 Thread에 wait와 notify (0) | 2024.05.13 |