[JAVA] I/O 입출력

JUNHO YEOM·2022년 12월 9일
0

JAVA

목록 보기
3/14

Java I/O (Input / Output)
Java I/O 적용 방법에는

  • 기본 I/O 이용하는 방식과
  • Java NIO라는 확장된 기능이 있습니다.

기본적인 I/O

class
interface 제공해준다
Java.io package를 통해 우리에게 제공됩니다.

Stream

객체로 존재합니다.
Instance로 존재합니다.(class가 제공됩니다.)
데이터 전송용 통로라고 생각하면 편합니다.

모니터를 표준출력으로 할 때
System.out.println()
Java program -> Stream -> 모니터(표준 출력)
System : 클래스
out : 스트림 객체
println() : 메서드


Stream의 특징

1. 두 가지 종류로 나뉜다.

Input Stream

Output Stream

  • Java program 에서 OS로 파일을 보낼 때(Output Stream),
    읽어올 때(Input Stream) 다음과 같이 두가지로 구분된다.


2. FIFO구조이다.(First In, First Out)

큐(Queue) 구조
A-B-C 순서로 보내면, A-B-C 순서로 나간다.


3. Stream은 결합하여 사용할 수 있다.

Stream 전체
Input Stream (클래스로 제공) -> 하위클래스
Output Stream (클래스로 제공) -> 하위클래스
클래스가 여러개 있다.
용도에 맞는 특징을 갖고 제공이 된다.


4. 바이트 단위의 Stream과 문자 단위의 Stream으로 나누어 진다.

바이트 단위의 Stream: 숫자(Writer)
문자 단위의 Stream: 문자(Reader)

기본 스트림은 사용하기 불편합니다.

우리는 기본적으로 문자열 기반의 입출력을 많이 사용하는데 기본 Stream으로 입출력 모두를 진행하기가 너무 힘듭니다.
그래서 기본이 되는 InputStream을 사용하고
이를 확장시키는 InputStreamReader
그 다음으로는 BufferedReader이라는 통로를 점점 확장해 나가는 방식으로
사용하기 편하게 만들어 갑니다.

BufferedReader(new InputStreamReader())
// InputStream으로 InputStreamReader로 변환
// InputStreamReader에서 BufferedReader로

System.out -> OutputStream의 객체

System.in -> InputputStream의 객체


결론

Stream이 데이터 연결 통로이다!
입력시에는 주로 BufferedReader 사용하고,
출력시에는

  • 모니터 : System.out 제공된 Stream 사용
  • 일반 용도 : PrintWriter 사용한다.

문자열 기반의 입력과 출력



객체 I/O

HashMap

예를 들어 HashMap을 File에 저장한다고 가정한다.
객체를 Stream을 통해 읽어내려면 어떻게 해야 할까?
객체를 Stream하는 것은 사용하는 Stream 자체가 다르다.(많이 다르다)

FileOutputStream -> dlshadmf rorcpfh qhsof tn djqtdjdy
-> 이걸 확장해서 -> 객체를 보낼 수 있는 Stream으로 만들면 됩니다.
-> Object Output Stream

데이터(객체를) 정상적으로 자바 밖으로 보내 OS에 저장하려면
이 객체는 반드시 Serializable interface를 구현하고 있어야 합니다.

이 데이터가 전달될 때, 데이터가 변경되는 과정을 Mashaling이라고 합니다.

0개의 댓글