자바 입출력 구현

Jiyeong·2022년 2월 17일
0

JAVA

목록 보기
22/31

Java I/O

I/O Stream에 의해 제공됨

입출력 스트림(I/O Stream)

자바는 모든 IO를 이 IO Stream 클래스를 통해 처리

입출력 장치에 독립적인 입출력 방식
-> 어떤 장치든 자바 IO 클래스 사용 시 읽고 쓰기 가능

자바에서 스트림을 구현하는 곳

파일 디스크, 키보드, 메모리, 네트워크

입출력 스트림의 구분

1. I/O 대상 기준

입력 스트림 : 대상으로부터 자료를 읽어 들임
출력 스트림 : 대상으로 자료를 출력함

입력스트림 : FileInputstream, FileReader 등
출력스트림 : FileOuputstream, FileWriter 등

데이터의 종류

바이트 스트림 : 동영상, 음악 파일 등을 읽고 쓸 때
문자 스트림 : 한글 등 문자는 2바이트 단위로 처리

기능


기반 스트림(저수준 스트림) : 대상에 직접 자료를 읽고 씀
ex) FileInputstream, FileOutputstream, FileReader, FileWriter 등

보조 스트림(Wrapper Stream) : 저수준 스트림 객체에 대한 레퍼런스, 추가적 기능 제공
ex) InputstreamReader, OutputstreamWriter 등

표준 입출력

System.out

표준 출력(모니터) 스트림
System.out.printl("에러 메시지");

System.in

표준 출력(키보드) 스트림
int d = System.in.read(); //한 바이트 읽어내기

System.in으로 읽을 때의 한계

  1. 바이트 단위로만 읽을 수 있음
  2. 문자 변환을 원할 시 재변환이 번거로움

Scanner로 읽을 때의 장점

  1. 메서드를 다양하게 활용 가능
  2. String을 다룰 때 편리함

한글의 경우 InputStreamReader를 사용해야 함!

InputStreamReader

  1. 보조 스트림(=Wrapper Stream)
  2. Input으로 들어온 데이터를 문자로 바꾸는 역할

FileInputStream : 바이트 스트림이기 때문에 한글 적용 불가

보조 스트림

실제로 읽고 쓰는 역할이 아닌 보조적인 기능을 추가하는 스트림
FilterInputStream과 FilterOutputStream이 보조 스트림의 상위 클래스
장식자 기능을 제공해 '데코레이터 패턴'으로 불림

Serialization(직렬화_

  1. 객체 자체를 데이터 스트림으로 만들어 파일에 저장 및 네트워크에 전송하는 것
  2. 스트림화 이유 : 추후 복원을 위해 객체 인스턴스 자체를 저장
    스트림으로부터 데이터 복원 = Deserialization
  3. 직렬화 구현 시 사용하는 보조 스트림 = ObjectInputStream / ObjectOutputStream

복원하기

  1. FileInputStream으로 object.txt에서 읽기
  2. 읽어오기 위해 ObjectInputStream 추가하기
  3. readObject()롤 쓴 순서대로 읽어들이기

Person으로 받기 위해 다운캐스팅하기

직렬화하고 싶지 않은 것은 transient 변수로 제외 가능
Externalizable : 읽고 쓰는 방식의 직접 구현 가능

profile
깃스타가 되고 싶은 벨플루언서

0개의 댓글