Java Study

데이터 입출력

Z00_HWAN_99 2024. 7. 17. 22:48
728x90
반응형

데이터 입출력

  • 자바에서 데이터를 입력하고 출력 기능을 제공하는 라이브러리(API) 활용 방법
  • 파일 입출력 & TCP/UDP 기반의 네트워크 환경에서 데이터 입출력

입력 스트림과 출력 스트림

  • 프로그램을 기준으로 데이터가 들어오면 입력 스트림, 데이터가 나가면 출력 스트림
  • 프로그램이 다른 프로그램과 데이터를 교환하려면 양쪽 모두 입력 스트림과 출력 스트림이 필요.
  • 바이트 스트림 : 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 입출력할 때 사용.
  • 문자 스트림 : 문자만 입출력할 때 사용.
  • 자바는 데이터 입출력과 관련된 라이브러리를 java.io 패키지에서 제공.
  • 바이트 입출력 스트림의 최상위 클래스는 InputStream과 OutputStream(둘 다 추상)
  • 문자 입출력 스트림의 최상위 클래스는 Reader과 Writer(둘 다 추상)

OutputStream

  • OutputStream은 바이트 출력 스트림의 최상위 클래스로 추상 클래스
  • 모든 바이트 출력 스트림 클래스는 이 OutputStream 클래스를 상속 받아서 만들어짐.
  • OutputStream 클래스에는 모든 바이트 출력 스트림이 기본적으로 가져야 할 메서드가 정의됨.

1바이트 출력

  • write(int b) 메서드 : 매개값 int(4byte)에서 끝 1byte만 출력. 매개변수는 int 타입.

바이트 배열 출력

  • write(byte[] b) 메서드 : 매개값으로 주어진 배열의 모든 바이트를 출력.
  • 배열의 일부분을 출력하려면 write(byte[] b, int off, int len) 메서드를 사용.

InputStream

  • InputStream은 바이트 입력 스트림의 최상위 클래스로, 추상 클래스
  • 모든 바이트 입력 스트림은 IputStream 클래스를 상속받아 만들어짐.
  • InputStream 클래스에는 바이트 입력 스트림이 기본적으로 가져야 할 메소드가 정의됨.

1바이트 입력

  • read() 메서드 : 입력 스트림으로부터 1byte를 읽고 int(4byte) 타입으로 리턴. 리턴된 4byte 중 끝 1byte에만 데이터가 들어 있음.
  • 더 이상 입력 스트림으로부터 바이트를 읽을 수 없다면 read() 메서드는 -1을 리턴. 읽을 수 있는 마지막 바이트까지 반복해서 한 바이트씩 읽을 수 있음.

바이트 배열로 읽기

  • read(byte[] b)메서드 : 입력스트림으로부터 주어진 배열의 길이만큼 바이트를 읽고 배열에 저장한 다음 읽은 바이트 수를 리턴.
  • read(byte[] b)도 입력스트림으로부터 바이트를 더 이상 읽을 수 없다면 -1을 리턴.
  • 읽을 수 있는 마지막 바이트까지 반복해서 읽을 수 있음.

문자 출력

  • Writer는 문자 출력 스트림의 최상위 클래스로, 추상클래스. 모든 문자 출력 스트림 클래스는 Writer 클래스를 상속 받아서 만들어짐.
  • Writer 클래스에는 모든 문자 출력 스트림이 기본적으로 가져야 할 메서드가 정의됨.

Reader

  • Reader는 문자 입력 스트림의 최상위 클래스로, 추상 클래스.
  • 모든 문자 입력 스트림 클래스는 Reader 클래스를 상속받아서 만들어짐.
  • Reader 클래스에는 문자 입력 스트림이 기본적으로 가져야 할 메서드가 정의됨.

보조 스트림

  • 다른 스트림과 연결되어 여러 편리한 기능을 제공해주는 스트림. 자체적으로 입출력을 수행할 수 없기 때문에 입출력 소스로부터 직접 생성된 스트림에 연결해서 사용.
  • 입출력 스트림에 보조 스트림을 연결하려면 보조 스트림을 생성할 때 생성자 매개값으로 입출력 스트림을 제공.
  • 보조 스트림 변수  = new 보조 스트림(입출력 스트림);
  • 보조 스트림은 또 다른 보조 스트림과 연결되어 스트림 체인으로 구성할 수 있음.
  • 보조 스트림 2 변수 = new 보조 스트림2(보조 스트림1);

InputStream을 Reader로 변환

  • InputStream을 Reader로 변환하려면 InputstreamReader 보조 스트림을 연결.

OutputStream을 Writer로 변환

  • OutputStream을 Writer로 변환하려면 OutputStreamWriter 보조 스트림을 연결.

메모리 버퍼로 실행 성능을 높이는 보조 스트림

  • 프로그램이 중간에 메모피 버퍼buffer와 작업해서 실행 성능 향상 가능.
  • 출력 스트림의 경우 직접 하드 디스크에 데이터를 보내지 않고 메모리 버퍼에 데이터를 보냄으로써 출력 속도를 향상.
  • 입력 스트림에서도 버퍼를 사용하면 읽기 성능 향상.
  • 바이트 스트림에는 BufferedInputStream, BufferedOutputStream이 있고 문자 스트림에는 BufferedReader, BufferedWriter가 있음.

기본 타입 스트림

  • 바이트 스트림에 DataInputStream과 DataOutputStream 보조 스트림을 연결하면 기본 타입(boolean, char, short, int, long, float, double) 값을 입출력할 수 있음.

PrintStream과 PrintWriter

  • 프린터와 유사하게 출력하는 print(), println(), printf() 메서드를 가진 보고 스트림
  • PrintStream은 바이트 출력 스트림과 연결되, PrintWriter는 문자 출력 스트림과 연결

직렬화 역직렬화

  • 직렬화 : 메모리에 생성된 객체를 파일 또는 네트워크로 출력하기 위해 필드값을 일렬로 늘어선 바이트로 변경하는 것.
  • 역직렬화 : 직렬화된 바이트를 객체의 필드값으로 복원하는 것.
  • ObjectOutputStream은 바이트 출력 스트림과 연결되어 객체를 직렬화하고, ObjectInputStream은 바이트 입력 스트림과 연결되어 객체로 복원하는 역직렬화.

Serializable 인터페이스

  • 멤버가 없는 빈 인터페이스이지만. 객체를 직렬화할 수 있다고 표시하는 역할.
  • 인스턴스 필드값은 직렬화 대상. 정적 필드값과 transient로 선언된 필드값은 직렬화에서 제외되므로 출력되지 않음.

serialVersionUID 필드

  • 직렬화할 때 사용된 클래스와 역직렬화할 때 사용된 클래스는 동일한 클래스여야 함.
  • 클래스 내용이 다르더라도 두 클래스가 동일한 serialVersionUID 상수값을 가지면 역직렬화 가능.

File 클래스

  • File 클래스로부터 File 객체를 생성.
  • exists() 메서드가 false를 리턴할 경우, 다음 메서드로 파일 또는 폴더를 생성.

Files 클래스

  • Files 클래스는 정적 메서드로 구성되어 있기 때문에 File클래스처럼 객체로 만들 필요 없음.
  • Files의 정적 메서드는 운영체제의 파일 시스템에게 파일 작업을 수행하도록 위임.

https://github.com/bottomsUp-99?tab=repositories

 

bottomsUp-99 - Overview

Backend Developer. bottomsUp-99 has 10 repositories available. Follow their code on GitHub.

github.com

 

728x90
반응형

'Java Study' 카테고리의 다른 글

Gson이란?  (0) 2024.07.18
java.base 모듈  (0) 2024.07.13
Lamda(람다식)  (0) 2024.07.12
제네릭(Generic)이란?  (0) 2024.07.10
JDBC 라이브러리  (0) 2024.07.07