안녕하세요, 의창입니다.
오늘 NIO 도 어느부분 나갔으나, 해야 할 과제가 있어 NIO 부분은 내일 올리겠습니다.
1. I/O 스트림
.1) 스트림이 ‘데이터를 어떻게 원하는 형태로 걸러내고 가공할 것인가?였다면,
.....‘I/O 스트림은 ’어떻게 데이터를 입력하고 출력할 것인가?‘에 대한 것이다.
.2) I/O 모델과 스트림(Stream)의 이해
..(1) 입력 스트림(Input Stream)
...- 실행 중인 자바프로그램으로 데이터를 읽어 들이는 스트림
..(2) 출력 스트림(Output Stream)
...- 실행 중인 자바 프로그램으로부터 데이터를 내보내는 스트림
※ try-with-resources 문을 기반으로 한 입 출력 스트림 예시
☞data.dat라는 데이터파일 생성
.3) 바이트 단위 입출 및 출력 스트림
..(1) 1바이트씩 바이트 스트림을 생성해서 파일을 복사하는 코드
※ 1바이트씩 바이트 스트림을 생성해서 파일을 복사하는 코드 예시
☞ 파일을 복사하기 위해서는 입력 스트림과 출력 스트림을 함께 생성해야 한다.
☞ while문에서 호출하는 read() 메소드는 파일로부터 읽어 들인 1바이트의 유효한 데이터에
....3바이트의 0을 채워서 4바이트 int형 데이터로 반환한다. 반면 스트림의 끝에 도달해서
....더 이상 읽어 들을 데이터가 없는 경우 –1을 반환한다.
..(2) byte 배열을 생성해서 이를 기반으로 많은 양의 데이터를 한 번에 읽고 쓰는 것도 가능
※ byte 배열을 생성해서 이를 기반으로 많은 양의 데이터를 한 번에 읽고 쓰는 예시
.4) 필터스트림
..(1) 입력 또는 출력 스트림에 덧붙여서 데이터를 조합, 가공 및 분리하는 역할을 한다.
※ 기본자료형 데이터 파일 저장 및 출력 예시
..(2) 버퍼링 기능을 제공하는 필터 스트림
...- 버퍼 입력 스트림은 내부에 ‘버퍼(메모리 공간)’을 갖는다.
...- 입력 스트림으로부터 많은 양의 데이터를 가져다 해당 버퍼를 채운다.
...- 프로그래머가 read 메소드를 호출할 때, 버퍼 스트림의 버퍼에 저장된 데이터를 반환.
...- 이것이 성능 향상의 핵심이다.
※ 버퍼 필터스트림 사용 예시
..(3) 버퍼링 기능에 대한 대책, flush 메소드의 호출
...- 버퍼 스트림에 저장된 데이터가 파일에 저장되지 않은 상태에서 컴퓨터가 다운되었을 때,
....,실제 파일에는 데이터가 저장되지 않는 일이 발생할 수 있다.
...- 버퍼가 차지 않아도 파일에 저장해야 할 중요한 데이터가 있다면, flush() 메소드를
.....호출하여 명시적으로 버퍼를 비우라고 (파일로 데이터 보내기) 명할 수 있다.
...- 그러나 이 메소드를 빈번히 호출하는 것은 성능향상에 방해가 된다.
..(4) 기본자료형 데이터 저장 + 버퍼링 기능 추가
...- File > Buffer > Data 순으로 스트림을 연결해야 한다.
※ 기본자료형 데이터 저장 + 버퍼링 기능 추가 예시
.5) 바이트 스트림과 문자 스트림의 차이
..(1) 영문과 특수문자 : 1바이트로 표현(인코딩)
..(2) 한글 : 2바이트로 표현(인코딩)
..(3) 한글 윈도우의 문자 표현방식이 자바의 문자 표현방식과 다르기 때문에
...“유니코드로 표현된 문자를 해당 운영체제의 문자 표현 방식으로 바꾸어서 저장해야 한다.”
.6) FileReader & FileWriter
..(1) 문자 입력(FileReader)과 문자 출력(FileWriteR) 스트림이다.
InputStream |
바이트 입력 스트림의 상위 클래스 |
Reader |
문자 입력 스트림의 상위 클래스 |
OutputStream |
바이트 출력 스트림의 상위 클래스 |
Writer |
문자 출력 스트림의 상위 클래스 |
FileInputStream |
파일 대상 바이트 입력 스트림 생성 |
FileReader |
파일 대상 문자 입력 스트림 생성 |
FileOutputStream |
파일 대상 바이트 출력 스트림 생성 |
FileWriter |
파일 대상 문자 출력 스트림 생성 |
※ 운영체제상에서 만든 텍스트 파일의 내용을 읽어서 출력하는 예제
※ 운영체제상에서 확인할 수 있는 형태로 알파벳을 파일에 저장하는 예제
.7) BufferedReader & BufferedWriter
BufferedInputStream |
바이트 기반 버퍼 입력 스트림 |
BufferedReader |
문자 기반 버퍼 입력 스트림 |
BufferedOutputStream |
바이트 기반 버퍼 출력 스트림 |
BufferedWriter |
문자 기반 버퍼 출력 스트림 |
※ 파일을 생성해서 두 개의 문자열을 저장하고 읽어서 출력하는 예제
.8) ObjectInputStream & ObjectOutputStream
..(1) 인스턴스의 저장은 바이트 스트림을 통해서 이루워진다.
..(2) 입출력의 대상이 되는 인스턴스의 클래스는 java.io.Serializable(마커 인터페이스)를
.......구현해야 한다.
..(3) 인스턴스를 저장하면 인스턴스 변수가 참조하는 인스턴스까지 함께 저장이 된다.
ObjectInputStream |
인스턴스를 입력하는 스트림 |
ObjectOutputStream |
인스턴스를 출력하는 스트림 |
※ ObjectInput Output 예제
.9) transient
..(1) 참조변수가 인스턴스의 저장되지를 원치 않을 때 transient 선언을 추가한다.
..(2) 이 참조변수는 복원했을 때 null로 초기화 된다.
'컴퓨터학원(복습)(수료)' 카테고리의 다른 글
자바(JAVA)기반 안드로이드 웹&앱 개발 26일차(NIO2, Thread, 동기화) (0) | 2021.03.31 |
---|---|
자바(JAVA)기반 안드로이드 웹&앱 개발 25일차 이어서..(NIO 2) (0) | 2021.03.30 |
자바(JAVA)기반 안드로이드 웹&앱 개발 24일차(Stream, Looping, LocalDate, ZoneId) (0) | 2021.03.27 |
자바(JAVA)기반 안드로이드 웹&앱 개발 23일차(메소드 참조, map, flatMap, Optional, Stream, Filtering, Mapping, reduce) (0) | 2021.03.25 |
자바(JAVA)기반 안드로이드 웹&앱 개발 22일차(멤버클래스, 로컬클래스, 익명클래스, 람다) (0) | 2021.03.24 |