[Java] 입출력(IO) : java.io
I/O : Input(저장) , Outoput(읽기)
I/O 클래스의 이름과 의미
- Stream으로 끝나는 클래스 : 바이트 단위로 입출력을 수행하는 클래스
InputStream | 1차 | 2차 |
---|---|---|
FileInputStream | ObjectInputStream | |
StringBufferInputStream | InputStream | |
DataInputStream | ||
BufferedInputStream |
OutputStream | 1차 | 2차 |
---|---|---|
FileOutputStream | OutputStream | |
DataOutputStream | ||
BufferedOutputStream |
- Reader / Writer로 끝나는 클래스 : 캐릭터 단위로 입출력을 수행하는 클래스
- File로 시작하는 클래스 : 하드디스크의 파일을 사용하는 클래스
Data로 시작하는 클래스 : 자바의 원시 자료형을 출력하기 위한 클래스
Buffered로 시작하는 클래스 : 시스템의 버퍼를 사용하는 클래스
-
BufferedInputStream , BufferdOutputStream
- FileInputStream, FileReader
- FileOutputStream , FileWriter
- BufferReader , InputStreamReader
- ObjectInputStream , ObjectOutputStream
-
BufferedInputStream , BufferdOutputStream
- 데이터 저장하는 방법 3가지
- 정형화된 데이터 : 구분O, 필요한 데이터O, 필요없는 데이터 X
- 반정형화 데이터 : 구분O, 필요한 데이터O, 필요없는 데이터 O
- 비정형화 데이터 : 구분X, 필요한 데이터O, 필요없는 데이터 O
- 스트림 : 통로를 만들어줘서 한 글자씩 읽어오는 것(파일-응용프로그램)
- 버퍼 : 중간에 메모리 임시공간을 만들어서 파일을 임시공간에 옮겨서 응용프로그램으로 읽어오는 것 (파일-임시공간-응용프로그램)
- inputstreamreader를 반드시 같이 써줘야 하는데, 그 이유는 1byte를 2byte로 변환시켜줘야 한글이 안깨지기 때문이다.
종류
- 메모리 입출력 : output, input
- 파일 입출력
- 네트워크 입출력
장단점
- 장점 : 정확한 전송이 가능함 => 스트림(데이터 통로) 이용하기 때문에
- 단점 : 단방향(입력과 출력이 다름)
데이터 읽는 방식
- 1byte (일반파일) : 바이트 스트림
- InputStream / OutputStream (인터페이스 : read,write)
- 업로드, 다운로드
- 2byte (문자,한글) : 문자 스트림
- Reader / Writer (인터페이스)
- 객체자체를 저장 : 직렬화
- ObjectInputStream
- ObjectOutputStream
- 속도 빠르게 하는 것 : Buffer
- BufferInputStream
- BufferOutputStream
(주의점)
- 반드시
import java.io.*
사용해야 함 - 반드시 예외처리 해야함
CheckException
파일 읽기
- FileInputStream (1byte) : 한글이 있는 경우에는 한글이 깨짐
- FileReader (2byte) : 한글 안깨짐
- 형식
FileInputStream fis = new FileInputStream("절대경로명");
while(파일끝까지)
{
출력
}
fis.close(); // finally => try~catch에 상관없이 수행
- 데이터 읽는 두 가지 방식 1) 한글자씩 읽기: FileInputStream, FileReader
int read()
* 리턴형이 글자 번호 , A는 65로 읽어옴 , char로 형변환해야함
2) 한줄씩 읽기 : BuffedReader
readLine()
파일 쓰기
데이터를 쓰기(저장) 방법
- FileOutputStream : 한글자씩 저장
- FileWriter : 한 번에 저장
- BufferedReader , file
프로그램 작성(파일)
- 전체 파일을 읽어서 분리 => 메모리에 저장 FileReader StringTokenizer, split
- 메모리에서 제어 (참고)
- 파일 : 분리할 수 없음 (전체를 통으로 저장하기 때문에)
- 오라클 : 분리되어 있는 상태
- 필요시마다 오라클에 연결 => 메소드안에서 처리함