2017. 2. 4. 00:18ㆍWork/Java
File class
File
File f = new File( [String path] );
입/출력 방향의 기준은 항상 JVM(자바 프로그램)이다.
파일에 데이터 쓰기, 읽기, 파일에 대한 데이터 정보, 파일 크기, 위치, 파일 삭제 또는 이름을 바꾸는 작업 등
-> 파일을 추상화한 클래스
파일
파일 시스템
OS에서 파일을 관리하는 체계
사용자 관점에서 의미하는 파일이 아닌 OS 시스템 관점에서 의미하는 파일
일반 : 사용자 관점에서 의미하는 파일과 같은 의미의 바이너리 파일
디렉토리 : 일반 파일을 관리하기 위한 파일
디바이스 : 시스템 하드웨어에 접근하기 위해서 사용
지명 파이프 : FIFO를 OS에서 사용하기 위해 파일로 생성한 것
IO
IO 의 동작(시스템 혹은 프로그램 레벨에서 bit 단위로 이루어짐)
java.io 패키지에 포함되어 있다.
Stream
바이트 스트림
-> Java.io 중 가장 기본이 되는 클래스는 InputStream과 OutputStream 클래스 이다.
-> 데이터 처리 단위가 1byte, 입출력이 1byte씩
스트림은 입력 전용과 출력 전용으로 구분, 하나의 스트림으로 입출력을 동시에 수행하지는 않는다.
- FIFO 구조를 갖고 있다.
데이터의 앞뒤 순서가 바뀌는 일은 발생하지 않는다.
- 순차적 접근만 허용 한다.
데이터 소스로부터 순차적으로 접근해야 한다. File 중간에 특정 부분의 데이터를 가져오거나 데이터를 쓰는 것 불가
- 단방향성을 갖고 있다.
특정 매체에 데이터를 읽고 쓰려면 읽기 전용 스트림과 쓰기 전용 스트림이 필요하다.
- 스트림을 사용하면 지연 현상이 발생한다.
스트림을 사용해서 프로그래밍을 하면 스트림이 동작하는 동안에는 해당 프로그램(스트림을 담당하는 스레드)이 블록(blocking)되면서 지연 상태로 빠진다.
스트림 동작이 끝나야 블록이 해제되면서 동작을 다시 시작한다.
- 유연한 구조를 갖고 있다.
여러 스트림 객체를 조합해서 사용할 수 있기 때문에 입력 스트림으로 받은 데이터를 곧바로 출력 스트림으로 돌릴 수 있다.
입력 스트림 : 자바 프로그램을 기준으로 데이터가 프로그램으로 유입되는 스트림
출력 스트림 : 자바 프로그램을 기준으로 데이터가 프로그램 외부로 나가는 스트림
문자 스트림 : 문자를 읽고 쓰는 단위가 16bit로 문자 혹은 문자열을 처리하기에 적합한 스트림. 16bit 크기를 갖는 유니코드를 다룬다.
바이트 스트림 : byte 단위 즉, 8bit 단위로 데이터를 읽고 쓰기 위한 스트림
InputStream class
- FileInputStream
- ObjectInputStream
바이트 단위로 객체를 읽을때 사용하는 클래스, readObject() 메소드는 역직렬화 기능
- FilterInputStream
- BufferedInputStream
- DataInputStream
-> 추상 클래스, new 키워드 사용 불가, 대부분의 메소드들이 IOException을 던진다. close() 메소드로 스트림을 닫아줘야 한다.
OutputStream class
- FileOutputStream
- ObjectOutputStream
바이트 단위로 객체를 쓸때 사용하는 클래스, writeObject() 메소드는 직렬화를 수행하는 기능
- FilterOutputStream
- BufferedOutputStream
- DataOutputStream
-> 추상 클래스, new 키워드 사용 불가, 대부분의 메소드들이 IOException을 던진다. close() 메소드로 스트림을 닫아줘야 한다.
Reader class
- BufferedReader
-> 입력의 성능 향상
- InputStreamReader
- FileReader
-> 보통 텍스트 파일 입력시 가장 많이 사용
Writer class
- BufferedWriter
-> 출력의 성능 향상
- OutputStreamWriter
- FileWriter
-> 보통 텍스트 파일 출력시 가장 많이 사용
-> 자료의 입출력을 도와주는 중간 매개체