Java I/O (Input / Output)
Java I/O 적용 방법에는
class
interface 제공해준다
Java.io package를 통해 우리에게 제공됩니다.
객체로 존재합니다.
Instance로 존재합니다.(class가 제공됩니다.)
데이터 전송용 통로라고 생각하면 편합니다.
모니터를 표준출력으로 할 때
System.out.println()
Java program -> Stream -> 모니터(표준 출력)
System : 클래스
out : 스트림 객체
println() : 메서드
큐(Queue) 구조
A-B-C 순서로 보내면, A-B-C 순서로 나간다.
Stream 전체
Input Stream (클래스로 제공) -> 하위클래스
Output Stream (클래스로 제공) -> 하위클래스
클래스가 여러개 있다.
용도에 맞는 특징을 갖고 제공이 된다.
바이트 단위의 Stream: 숫자(Writer)
문자 단위의 Stream: 문자(Reader)
기본 스트림은 사용하기 불편합니다.
우리는 기본적으로 문자열 기반의 입출력을 많이 사용하는데 기본 Stream으로 입출력 모두를 진행하기가 너무 힘듭니다.
그래서 기본이 되는 InputStream을 사용하고
이를 확장시키는 InputStreamReader
그 다음으로는 BufferedReader이라는 통로를 점점 확장해 나가는 방식으로
사용하기 편하게 만들어 갑니다.
BufferedReader(new InputStreamReader())
// InputStream으로 InputStreamReader로 변환
// InputStreamReader에서 BufferedReader로
System.out -> OutputStream의 객체
System.in -> InputputStream의 객체
Stream이 데이터 연결 통로이다!
입력시에는 주로 BufferedReader 사용하고,
출력시에는
문자열 기반의 입력과 출력
예를 들어 HashMap을 File에 저장한다고 가정한다.
객체를 Stream을 통해 읽어내려면 어떻게 해야 할까?
객체를 Stream하는 것은 사용하는 Stream 자체가 다르다.(많이 다르다)
FileOutputStream -> dlshadmf rorcpfh qhsof tn djqtdjdy
-> 이걸 확장해서 -> 객체를 보낼 수 있는 Stream으로 만들면 됩니다.
-> Object Output Stream
데이터(객체를) 정상적으로 자바 밖으로 보내 OS에 저장하려면
이 객체는반드시 Serializable interface를 구현하고 있어야 합니다.
이 데이터가 전달될 때, 데이터가 변경되는 과정을 Mashaling이라고 합니다.