<스터디 주제>
Java - IO
<스터디 내용>
Input Stream
Input(1byte)
Reader(1byte)
InputStream is = System.in;
- byte 단위 입출력 inputstream, outputstream
- char 단위 입출력 reader writer
파일 : FileInputStream / OutputStream / FileReader / FileWirter
배열 : ByteArrayInputStream / By
byte단위 char단위
| inputstream | outputstream | reader | writer | |
| 파일 | FileInputStream | OutputStream | FileReader | FileWriter |
| 배열 | ByteArrayInputStream | ByteArrayOutputStream | CharReader | CharWriter |
| 장식대상클래스 | ||||
| DataInputStream | DataOutputStream | BufferedReader | PrintWriter | |
| 장식하는클래스 | ||||
| ObjectInputStream | ObjectOutputStream | |||
| DataInputStream | DataOutputStream | |||
IO는 수도꼭지에 샤워꼭지를 끼우고 연수기를 끼우고 등등의 방법처럼
여러개 클래스를 생성 넣고 넣고 넣고 하는 식으로 사용한다고함!
Byte단위 입출력
FileInputStream의 read()메소드는 1byte씩 읽고 return타입은 정수
정수의 4byte 중 마지막 byte에 읽어드린 1byte를 저장한다.
byte를 return은 끝을 표현할 수 없기 때문 에 int return
음수의 경우 맨 좌측 bit가 1 음수
byte단위는 읽어들일 것이 있다면 항상 양수를 return
BufferedReader&PrintWriter
버퍼에 문자단위 입력받은 데이터를 저장 후 한줄씩 입력할 수 있는 클래스.
- readLine : 버퍼의 문자단위를 한줄로 읽어오는 메소드
FileOutputStream
출력 : 입력받은 것을 출력해준다.
- InputStreamReader를 통해 Char단위로 입력받아서 bufferedReader를 통해 한줄로 읽음
- br.readLine()으로 입력된 한줄을 String str에 저장
- new File을 통해 원하는 경로, 원하는 파일명으로 객체 생성 (생성자만 만들어도 객체가 생성되어 메모리에 잡힘???)
- FileOutputStream통해 위에 생성된 파일에 출력되는 객체 생성
- BR을 통해 입력받은 한줄을 byte로 받아와서 write()메소드를 통해 출력한다.
FileWriter
새로쓰기, : 입력받은 것을 기존 내용에 덮어씌워서 새로써서 출력해준다.
write() : 입력받은 내용 또는 텍스트를 파일에 새로써준다
flush() : 입력받은 내용을 삭제 → 다시 입력할 수 있도록 입력객체 유지
close() : 입력객체 종료
FileInputStream
- File class를 통해 파일을 불러온다.
- FileInputStream을 통해 byte단위로 직렬화하여 stream에 넣는다
- 직렬화된 byte단위 stream을 bufferedInputStream을 통해 buffer 단위로 저장한다
- readAllbytes 를 통해 모든걸 읽어들이고
- byte[] 배열안에 집어넣는다
- byte[]을 String(Wrapper클래스)타입으로 형변환하여 출력
FileCopy
- File을 통해 경로를 불러옴
- file.exists()로 해당 파일이 있는지 없는지 확인 후
- file.getName() 통해 파일명을 불러오고
- 복사할 장소의 경로를 새 file객체(tarFile)을 생성
- 복사할 곳에 파일이 있는지 tarFile.exist로 확인
- 있으면 lastIndexOf를 통해 . 의 위치를 이용 substring을 통해 파일명과 확장자를 분리
- newName이란 String 변수에 기존 파일명에 반복문을 통해 (cnt) 식으로 새이름을 tarFIle 객체에 집어넣는다.
- 없다면 그대로 새로운 경로에 오리지널 파일명이 tarFIle 객체에 집어넣어짐
- 복사할 파일의 길이만큼 byte 배열을 만들고
- FileInputStream을 통해 원래 파일객체(경로,파일명)을 byte단위로 0~길이만큼 읽어오고
- FileOutputStream을 통해 복사될 파일객체(경로,파일명)을 byte배열의 길이 만큼 출력하여 쓴다(생성을 뜻함)
DataInputOutputStream
- 파일객체에 특정정보를 입력할 파일명 경로를 삽입
- FileOutputStream을 통해 해당 파일을 byte단위로 출력객체에 넣고, DataOutputStream을 통해 출력객체를 데이터형공간 객체에 넣음
- 각 데이터 타입의 값을 writeXXXX(데이터타입) 메소드를 통해 객체에 넣어서 1번에 지정한 경로의 파일에 byte단위로 데이터 삽입
- 출력객체(쓰기) 종료
- FileInputStream을 통해 byte단위로 읽어올 입력객체를 생성, DataInputStream을 통해 데이터단위로 읽어서 byte단위로 읽어옴
- readXXXX(데이터타입) 메소드를 통해 File 객체에 저장된 각 데이터 타입의 정보를 byte단위로 읽어온다
- 출력
※ DataOutputStream(커넥션풀객체 생성시 활용된다고 함.)
ObjectOutputStream
- 파일객체에 경로를 삽입
- FileOutputStream을 통해 파일을 byte단위로 출력할 객체 생성
- ObjectOutputStream을 통해 byte단위로 읽어온 출력객체를 객체단위 출력객체로 생성
- Serializable 인터페이스를 상속받은 VO Class에 setter를 통해 vo에 입력
- OOS의 writeObject 메소드를 이용해서 vo class에 저장된 정보를 byte단위로 직렬화 하여 출력객체를 통해 파일에 씀
- 출력객체 닫음
ObjectInputStream
- 저장된 데이터를 객체단위로 읽어온 정보를 obj 객체에 넣음
- vo 타입으로 넣음
- vo 클래스의 print 메소드 사용
- 각 데이터 타입의 변수에 vo에 저장된 정보를 가져옴
- 출력
RandomAccessFile
RandomAccessFile객체는 읽기전용("r"), 쓰기전용("w"), 읽기쓰기("rw")가능 설정이 가능하다. 원하는 위치로 이동하여 읽기 쓰기가 가능하다.
- writeBytes
- seek
※ 버퍼란
데이터를 전송하는 상호간의 장치에서 고속의 장치와 저속의 장치 간의 속도 차이로 인해
저속의 장치가 작업을 추리하는 동안 고속의 장치가 기다려야 하는 현상을 줄여주는 기술이다.
출처:
https://csw7432.tistory.com/entry/Java-Input-Output-Stream
'Web Dev' 카테고리의 다른 글
| 58일차 Study (0) | 2022.01.04 |
|---|---|
| 57일차 Study (0) | 2022.01.04 |
| 56일차 Study (1) | 2021.12.31 |
| 55일차 Study (0) | 2021.12.31 |
| 54일차 Study (0) | 2021.12.30 |