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
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 |