(학) (공) (web)

04.18(45일차) - File클래스, 입출력 스트림, 보조스트림

만석이 2024. 4. 18. 17:50
File클래스
파일 또는 폴더에 대한 정보를 제공하는 클래스
경로명, 파일 크기, 타입 날짜 등의 속성 정보를 제공한다.
파일 생성, 삭제, 이름 변경 등 파일 관리 작업을 지원하기 위한 메서드로 구성되어 있다.



isFile()
경로의 마지막이 파일이면 true, 아니면 false


idDirectoty()
최종 목적지가 폴더면 true, 아니면 false


list()
경로 하위에 있는 목록의 이름을 문자열 배열로 반환


exists()
목적지가 존재하면 true, 없으면 false

mkdir() -> 폴더 하나만 생성
mkdirs() -> 폴더 여러개 생성 가능


===파일입출력===
프로그램은 데이터를 외부에서 입력받아 처리하고 출력하는 구조로 되어있다.

프로그램으로 들어오는 모든 값을 Input이라고 한다.

프로그램에서 나가는 모든 값을 Output이라고 한다.

자바에서는 입출력을 처리하기 위해 별도의 I/O 패키지를 제공한다.

데이터는 자바에서 처리할 수 있는 모든 데이터를 의미한다.

디스크상에 존재하는 데이터일수도 있고, 키보드나 마우스와 같은 외부 입력장치에서 입력되는 데이터일수도 있고, 
인터넷에서 전송되는 데이터일수도 있다.

자바가 외부에 접근해 데이터를 주고받는 작업을 도외주는 통로를 스트림(stream)이라고 한다.


===입출력 스트림의 종류===
- 바이트 기반의 스트림
	-데이터를 컴퓨터의 기본 단위인 byte단위로 나누어 쓴다.

- 문자 기반 스트림
	-텍스트 기반의 문서를 다루기 위해 사용하는 스트림이다.


InputStream의 주요 메서드
int read() 문자를 1byte씩 읽고 반환, 더이상 읽을 문자 없으면 -1 반환

int read(byte[] b)
매개변수로 주어진 배열에 읽은 문자를 저장하고 실제로 읽은 수만큼 반환, 더 이상 읽을 문자가 없으면 -1 반환


int read(byte[] b, int offset, int len)
매개변수로 주어진 배열에다 정해진 범위만큼 읽어서 저장


int available()
스트림으로부터 읽어올 수 있는 데이터의 크기를 반환


close()
스트림을 사용하고 자원을 반환


FileInputStream 은 파일에서 바이트 단위로 자료를 읽어들일 때 사용하는 스트림
이미지, 동영상, 텍스트 등 모든 타입의 파일을 읽어올 수 있다.



자바에서는 char형을 통해 문자를 저장할 수 있다.
1byte 단위로 처리하는 바이트 기반 스트림은 모든 파일을 다룰 수 있으나 문자를 처리하는 char형의 크기는 2byte로 
별도의 처리를 하지 않으면 정상적으로 읽지 못하는 경우가 있다.
이때 문자 기반의 스트림을 사용하면 간단하게 문자를 처리할 수 있다.



===보조스트림===
- 직접 읽고 쓰는 기능은 없지만 기반 스트림에 추가로 사용할 수 있는 스트림
- 보조스트림을 사용하려면 기반 스트림을 매개변수로 받는 기반스트림이 먼저 선언되어야한다.
- 보조스트림은 스스로 데이터를 읽거나 쓸 수 없기 때문에 입출력과 바로 연결되는 기반스트림이 필요하다.


===성능 향상 보조 스트림===
- 느린 하드디스크와 네트워크는 입출력 성능에 영향을 준다.
- 이때 입출력 소스와 직접 작업하지 않고 버퍼라는 메모리를 이용해 작업을 하면 실행 성능을 향상시킬 수 있다.
- 하지만 버퍼의 크기는 작아서 많은 양의 데이터를 처리하기에는 부족하다.
- 보조 스트림 중에서는 메모리 버퍼를 추가로 제공하여 스트림의 성능을 향상 시키는 것들이 있다.
	바이트 기반 스트림 : BufferedInputStream, BufferdOutputStram
	문자 기반 스트림 : BufferedReader, BufferedWriter