9월 13일 개인공부

안효빈·2022년 9월 13일
0

개인 공부

목록 보기
9/36

스트림의 분류와 종류

FileOutputStream

  • 파일로부터 바이트 단위로 저장할 떄 사용

  • 그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 데이터를 파일로 저장
    OutputStream의 하위 클래스로 OutputStream과 사용 방법 동일

  • FileOutputStream객체가 생성될 떄 파일가 직접 연결됨, 만약 파일이 존재하면 자동으로 생성하지만, 이미 파일이 존재하는 경우 파일을 덮어쓰는 단점이 있음.

  • FileOutputStream fos = new FileOutputStream("C:/data/test.txt");
    만일 기존 파일에 이어서 계속 작성하고 싶다면 아래 예제처럼 객체 생성 시 가능
    FileOutputStream fos = new FileOutputStream("C:/data/test.txt", true);

FileReader

  • 텍스트 파일로부터 문자 단위로 읽을 떄 사용

  • 텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 읽기 불가능

  • Reader의 하위 클래스로 Reader와 사용 방법 동일

  • FileReader객체가 생성될 떄 파일과 직접 연결 됨, 만약 파일이 존재하지 않으면 FileNotFoundException이 발생하므로 예외처리 필수

FileWriter

  • 텍스트 파일로부터 문자 단위로 저장할 떄 사용

  • 텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 저장 불가능

  • Writer의 하위 클래스로 Writer과 사용 방법 동일

  • FileWriter객체가 생성될 떄 파일과 직접 연결 됨.

보조 스트림

  • 스트림의 기능을 향상시키거나 새로운 기능을 추가하기 위해 사용
  • 보조스트림은 실제 데이터를 주고 받는 스트림이 아니기 떄문에 입출력 처리 불가능
  • 기반 스트림을 먼저 생성한 후 이를 이용하여 보조 스트림 생성

보조스트림추가설명

  • 실제 읽고 쓰는 스트림이 아닌 보조적인 기능을 추가하는 스트림

  • 데코레이션 패턴

  • FilterInputStream과 FilterOutputStream이 보조스트림의 상위 클래스

  • 생성자의 매개변수로 또 다른 스트림을 가짐

보조스트림 종류

문자 변환(InputStreamReader/OutputStreamWriter)

입출력 성능(BufferedInputStream/BufferedOutputStream)

기본 데이터 타입 출력(DataInputStream/DataOutputStream)

객체 입출력(ObjectInputStream/ObjectOutputStream) 등의 기능을 제공하는 보조스트림이 있음

FileInputStream fis = new FileInputStream("Sample.txt"); //기반 스트림 생성

BufferedInputStream bis = new BufferedInputStream(fis); //보조스트림 생성

bis.read(); //보조스트림으로부터 데이터 읽어옴

문자 변환 보조 스트림

  • 소스 스트림이 바이트 기반 스트림이지만 데이터가 문자일 경우 사용

  • Reader와 Writer는 문자 단위로 입출력을 하기 떄문에 데이터가 문자인 경우 바이트 기반 스트림보다 편리하게 사용 가능.

성능 향상 보조 스트림

  • 느린 속도로 인해 입출력 성능에 영향을 미치는 입출력 소스를 이용하는 경우 사용 입출력 소스와 직접 작업하지 않고 버퍼에 데이터를 모아 한꺼번에 작업을 하여 실행 성능 향상(입출력 횟수 줄임)

기본 타입 입출력 보조 스트림

  • 기본 자료형 별 데이터 읽고 쓰기가 가능하도록 기능 제공

  • 단, 입력된 자료형의 순서와 출력될 자료형의 순서 일치

객체 입출력 보조 스트림

  • 객체를 파일 또는 네트워크로 입출력할 수 있는 기능 제공

  • 단, 객체는 문자가 아니므로 바이트 기반 스트림으로 데이터를 변경해주는 직렬화 필수

직렬화와 역직렬화

  • 직렬화(Serialization)
    Serialization 인터페이스를 implement하여 구현
    객체 직렬화 시 private 필드를 포함한 모든 필드를 바이트로 변환하지만
    transient키워드를 사용한 필드는 직렬화에서 제외

  • 역직렬화(Deserialization)
    직렬화된 객체를 역직렬화할 때는 직렬화했을 떄와 같은 클래스 사용
    단, 클래스 이름이 같더라도 클래스 내용이 변경된 경우 역직렬화 실패

  • serialVersionUID 필드
    직렬화한 클래스와 같은 클래스임을 알려주는 식별자 역할로 컴파일 시 JVM이 자동으로 serialVersionUID 정적 필드를 추가해줘 별도로 작성하지 않아도 오류는 나지 않지만 자동 생성 시 역직렬화해서 예상하지 못한 InvailedClassException을 유발할수 있어 명시를 권장.텍스트

flush()와 close()메소드

  • 출력 버퍼를 비울떄 flush()메서드를 사용

  • close()메서드 내부에서 flush()가 호출되므로 close()메서드가 호출되면 출력버퍼가 비워짐

InputStreamReader와 OutputStreamReader

  • 바이트 단위로 읽거나 쓰는 자료를 문자로 변환해주는 보조 스트림

  • FileInputStream(바이트 스트림)으로 읽은 자료를 문자와 변환하는 예

Buffered 스트림텍스트

  • 내부적으로 8192 바이트 배열을 가지고 읽거나 쓰기 기능을 제공하여 속도가 빨라짐.

버퍼드, 인풋, 프레임워크 시험에 나올만함

  • 다시 공부

이클립스새로고침할떄 패키지익스플로어에서아무거나누르고컨트롤에이F5누르면바로리프레시됨


스트림 분류랑 종류 싹 공부

스트림의 분류

용도에 의한 분류

  • 1차 스트림 : 디바이스에 직접 연결되는 스트림

  • 2차 스트림 : 1차 스트림과 연결을 통해 디바이스에 연결되는 스트림

전송 방향에 의한 분류

  • 입력 스트림 : 디바이스로부터 데이터를 읽어오는 스트림

  • 출력 스트림 : 디바이스로 데이터를 출력하는 스트림

전송 단위에 의한 분류

  • 바이트 스트림 : 1Byte 단위로 입력, 출력하는 스트림

  • 문자 스트림 : 한 문자(2Byte) 단위로 입력, 출력하는 스트림

* 보조 스트림

  • 스트림의 기능을 향상시키거나 새로운 기능을 추가시킴

  • 직접적인 데이터 입출력을 할 수 없다.

<각 클래스별로 정의된 메소드 알아서 공부>


profile
다들 화이팅

0개의 댓글