# IO
- 입출력 (Input & Output) 스트림을 뜻한다.
- 자바의 io 패키지는 파일이나 폴더를 제어하는데 사용하는 file클래스를 보유하고 있다.
스트림이란, 가상머신에서 데이터를 입출력하기위한 통로로서 파일을 읽어들이거나 콘솔의 값을 가져오는 역할을 한다.
[참고] 콘솔이란 이클립스 외부 영역의 전부인 외장메모리, sd카드, 키보드, 마우스, c드라이브를 뜻한다.
[예시] JVM과 IO의 관계
- 입출력에서 입출력 기준은 jvm이 된다.
- 콘솔 (외부)로 데이터를 전송하는 경우를 아웃풋, 외부에 있는 데이터를 이클립스의 콘솔로 받아오는 경우를 인풋이라고 한다.

# File
- 입출력(io) 패키지에서 제공하는 클래스
- 파일의 명칭 복사, 수정등의 작업에 필요한 메소드를 가지고있으며 입출력에 관한 메소드를 제공하지는 않는다.
생성자
생성자
|
설명
|
|
File(String path)
|
문자열 path를 가지고 경로를 생성한 뒤 파일객체를 생성
|
|
File(String dir, String path)
|
문자열 dir과 path를 연결한 문자열로 경로를 생성한 뒤 파일객체를 생성
|
|
File(File dir, String path)
|
파일객체 dir과 문자열 path로 경로를 생성한 뒤 파일객체를 생성
|
|
File(URI uri)
|
uri 경로에대한 파일객체를 생성
|
메소드
메소드
|
설명
|
|
exists()
|
파일 클래스가 접근한 PATH경로까지 물리적으로 빠짐없이 폴더가 존재하는지에따라서 참과 거짓을 반환
|
|
isDirectory()
|
path 경로에 해당 디렉토리(물리적 주소)가 존재하면 참, 않다면 거짓 반환
|
|
isFile()
|
외부의 데이터가 파일이면 참, 아닐 경우 거짓 반환
|
|
mkdir()
|
path 경로의 가장 하위의 폴더가 존재하지 않는 경우 폴더 자동 생성 (생성시 참, 이미 존재시 거짓 반환)
|
|
mkdirs()
|
마지막 하위 폴더까지 이어지는 폴더가 존재하지않을 경우 자동 생성 (생성시 참, 이미 존재시 거짓 반환)
|
|
rename(File name)
|
name 명칭으로 파일의 명칭을 변경하며 성공시 참, 실패시 거짓을 반환한다.
|
|
length()
|
파일의 크기를 long 타입의 바이트로 반환
|
|
list()
|
경로에 있는 폴더와 파일을 String 타입의 배열로 반환
|
|
listFiles()
|
경로에 있는 폴더와 파일을 파일 타입의 목록으로 반환 (폴더와 파일 구분시 사용한다.)
|
|
getPath()
|
파일, 폴더의 경로 반환
|
|
getName()
|
파일, 목록의 명칭 반환
|
# 스트림
- 입출력 장치와 프로그램 사이의 흐름이자, 두가지를 연결하는 단방향의 통로이다.
- 전달되는 데이터는 기본적으로 바이트(byte)이다.
- 입력을 담당하는 input file stream과 출력을 담당하는 output file stream이 존재한다.
- 스트림 객체 선언으로 통로를 오픈하고 close 메소드를 통해서 통로를 닫는다.
[예시] 스트림의 구조

종류
유형
|
설명
|
타입
|
|
file stream
|
byte 기반의 스트림으로 1byte씩 가져온다.
|
- file input stream
- buffered input stream - file output stream - buffered output stream |
|
char stream
|
char 기반의 스트림으로 2byte씩 가져온다.
|
- file reader
- buffered reader - file writer - buffered writer |
[참고] 한글 데이터와 스트림
- 한글은 2byte의 크기를 가지는데
- file stream 은 1byte 단위로 데이터를 읽으므로 한 글자를 반으로 나눠서 1byte씩 배열에 담는다.
- 그래서 한글 데이터는 2byte씩 저장이 가능한 char stream 을 많이 사용한다.
# 1 file stream

# 2 char stream

# 버퍼링 & 버퍼
- 유튜브등의 영상 시청 시에 와이파이가 느린 속도의 환경에서는 영상이 멈추면서 화면 중앙에 로딩 바가 도는 현상이 뜬다.
- 일반적으로 이러한 현상을 버퍼링이 걸렸다고 하는데 이 현상은 어느정도 지속되다가 일정 시간이 지나면
- 아래의 사진처럼 로딩 바에 회색의 영역이 늘어나며 막힘없이 재생이 된다.

(1) 버퍼란, 입출력을 위해서 마련된 기억 장치의 일부분으로서 자바는 버퍼에 데이터를 모아서 입출력 속도를 높인다.
(2) 버퍼링이란 영상등의 입출력 데이터를 버퍼라는 영역에 미리 모아서 저장하는 행위이다.
[참고] 프로그래밍의 관점에서는 출력하고자하는 데이터를 버퍼라는 메모리 공간에 바이트 배열로 미리 저장해두는 작업이다.
# 버퍼 스트림
- 자바의 성능 향상 보조 스트림으로서, 버퍼라는 전용 공간을 통해서 데이터를 입출력 용도로 사용하는 전용 스트림
- 일반 스트림과 버퍼 스트림을 엮어 입출력 작업에서 버퍼링 작업을 수행하도록 한다.
[예시] 스트림과 버퍼 스트림의 차이
- 0 1 0 1 이라는 데이터를 전송한다는 상황에서
- 파일 스트림은 0 부터 데이터를 하나씩 스트림에 담아 전송한다.
- 버퍼 스트림은 버퍼라는 영역에 0 1 0 1 의 데이터를 바이트 형식의 배열에 담아서 저장한 뒤, 한 덩어리로 한번에 전송한다.
- 속도 측면에서 버퍼가 스트림보다 더 뛰어나다.

'Web > Java' 카테고리의 다른 글
[Java] 직렬화 (0) | 2025.01.09 |
---|---|
[Java] 스레드 (0) | 2025.01.09 |
[Java] 에러 (0) | 2025.01.09 |
[Java] 인터페이스 (0) | 2025.01.09 |
[Java] 상속 (0) | 2025.01.09 |