재밌고 어려운 IT를 이해해보자~!
Section 19. 파일 입출력 본문
01. 자바 입출력과 스트림
자바는 입출력을 처리하기 위해 별도의 I/O 패키지를 제공한다.
자바 프로그래밍이 디스크에 접근해 데이터를 주고받는 작업을 도와주는 통로를 '스트림(Stream)' 이라고한다.
입출력 스트립의 특징
입력과 출력이 동시에 진행되는 것이 아니라 독립적으로 한 가지 기능만 동작하기 때문에 데이터를 교환하기 위해서 입력, 출력 스트림이 따로 필요하다.
02. 입출력 스트림의 종류
03. 바이트 기반 스트림
최상위 객체 InputStream에서 가장 많이 사용되는 FileInputStream을 알아보자!
FileInputStream
파일을 바이트 단위로 읽어드린다.
new FileInputStream(경로/파일명);
OutputStream:바이트 출력 스트림
바이트기반 출력 스트림 최상위 객체! 가장많이 사용하는 FileOutputStream을 알아보자.
FileOutputStream
파일을 쓰기 위한 FileOutputStream 선언방법
new FileOutputStream(경로/파일명, 이어쓰기 옵션);
파일을 쓸 때 기존 파일명이 존재한다면 내용을 이어쓰거나, 새롭게 파일을 생성할 수 있다.
이어쓰기 옵션이 ture면 이어쓰기, false면 새롭게 생성
04. 문자 기반 스트림
Reader : 문자 입력 스트림
문자기반 입력 스트림의 최상위 클래스 Reader! 가장 많이 사용하는 FileReader를 알아보자
FileReader
앞에서 학습한 FileInputStream과 거의 동일하다.
바이트단위로 읽어오면(FileInputStream) 한글이 (2byte)이 꺠지지만, FileReader로 읽어오면 깨지지않는다! 문자단위로 읽어서 int형으로 반환
Reader : 문자 출력 스트림
문자 기반 출력 스트림의 최상위 클래스 Writer! 가장많이쓰이는 FileWirter를 알아보자
FileWriter
앞에서 학습한 FileInputStream과 거의 동일하다.
05. 보조 스트림
스트림은 기능에 따라 기반 스트림, 보조 스트림으로 구분된다.
- 기반 스트림 : 대상에 직접 자료를 읽고 쓰는 스트림
- 보조 스트림 : 직접 읽고 쓰는 기능 없이 기반 스트림에 추가로 사용할 수 있는 스트림
성능 향상 보조 스트림
보조 스트림 중에서는 메모리 버퍼를 추가로 제공하여 스트림의 성능을 향상시키는 것들이 있다!~
- 바이트 기반 스트림 : BufferedInputStream, BufferedOutputStream
- 문자 기반 스트림 : BufferedReader, BufferedWirte
저장해두었다가 큰단위로 입력하고 큰단위로 출력한다! 한번에...전송 횟수가 줄어들어 성능향상!\
06. File 클래스
파일 객체 선언
File file = new File("C:\\files\\exmple.txt");
File file = new File("C:/files/example.txt");
윈도우의경우 // \ 둘다가능
리눅스 /만 가능
파일 객체 기능
댕많다......필요할떄...잘쓰자
07. 직렬화
직렬화는 자바 시스템 내부에서 사용하는 객체나 데이터를 외부의 시스템에서 사용할 수 있도록 바이트단위의 데이터로 변환시키는 기술을 말한다. 즉, 클래스 형태의 데이터를 바이트 단위로 변환한다.
객체의 직렬화
pulbic class Person implements Serializable {
private static final long serialVersionUIID = 1L;
}
serialVersionUID
이값은 객체의 직렬화 또는 역직렬화 할 떄 서로 값이 맞는지를 확인하는 기준이 되는 값이다.
만약 직렬화 과정에서 해당값이 변경되면 InvalidClassException 예외가 발생한다.
*참조
https://velog.io/@changhee09/%EC%9E%90%EB%B0%94-InputStream-OutputStream
https://blog.naver.com/PostView.naver?blogId=qbxlvnf11&logNo=221140609067
'JAVA Book Study' 카테고리의 다른 글
Section 18. 스레드 (0) | 2024.01.02 |
---|---|
Section 17. 람다식 (0) | 2024.01.02 |
Section 16. 컬렉션 프레임워크 (1) | 2024.01.01 |
Section 15. 기본 API 클래스 (2) | 2024.01.01 |
Section 14. 예외 처리 (0) | 2023.12.31 |