I/O 스트림
– I/O: 데이터 읽기 및 쓰기
– 스트림: 네트워크에서 데이터의 흐름이 물의 흐름과 같다는 비유에서 파생
– 서로 다른 입/출력 장치에 대해 독립적이고 일관된 입/출력 제공
– 입출력 장치 예) 파일 디스크, 키보드, 마우스, 네트워크, 스토리지 등
– 한 방향으로만 이동
입력 및 출력 전류의 분류
# 목표 기준
1) 입력 스트림(InputStream, Reader, …)
2) 출력 스트림(OutputStream, Writer, …)
# 데이터 유형에 따라
1) 바이트 단위 스트림(InputStream, OutputStream, …)
2) 문자 스트림(Reader, Writer, …)
# 기능 기준
1) 기반 전류
2) 2차 전류(완충~)
입력 전류 및 출력 전류
//// 입력
// 바이트 스트림 (1 byte씩 키보드의 값을 입력받음)
int 변수 = System.in.read();
//// 출력
// 정수 값으로 그대로 출력
System.out.println(변수);
// 정수 값을 문자로 변환해서 출력 (인코딩)
System.out.println((char) 변수);
# 입력 스트림 (Java 프로그램 ← 입출력 데이터)
– 대상에서 데이터를 읽는 스트림
– 파일에서 텍스트를 가져올 때 더 이상 읽을 텍스트가 없으면 -1을 반환합니다.
– read() 메서드: 한 번에 한 문자씩 읽기(반환 데이터 유형: int)
→ 보조 스트림의 readLine() 메서드를 사용하여 한 번에 한 줄씩 읽습니다(Enter까지).
# 출력 스트림 (Java 프로그램 → 입출력 데이터)
– 목적지로 데이터를 출력하는 스트림
– 라이터가 작성되고 스트림이 열리면 잠시 동안 “버퍼”라는 영역에 저장됩니다.
flash() 또는 close()가 발견되면 실제로 파일에 덤프합니다.
→ 플러시() 메서드 또는 close() 메서드사용하지 않으면 결과가 적용되지 않을 수 있습니다.
– Write 메소드 사용법
fw변수 = new FileWriter("파일명.확장자");
// 1. 문자 하나 (char)
fw.write('H');
// 2. 문자열
fw.write("문자열");
// 3. 배열 내 모든 문자들
fw.write(배열명);
// 4. 배열에서 시작인덱스a부터 n개만큼의 문자들
fw.write(배열명, 시작인덱스a, 길이n);
// FileOutputStream의 옵션
FileOutputStream fos변수 = new FileOutputStream("파일명.확장자", (true | false));
// false (기본값) : 기존 파일이 있다면, 기존 내용을 초기화한 후 값을 출력함
// true : 기존 파일이 있다면, 기존 내용을 그대로 두고 값을 추가해서 출력함
바이트 스트림과 문자 스트림
# 바이트 스트림
– 동영상, 음악, 실행 파일 등의 데이터 읽기에 사용
– 한글 사용시 글자가 깨져요
– 예: https://young0105.104
# 문자 스트림
– 인코딩에 따라 2바이트 이상의 데이터 처리
→ 한글을 사용해도 글자가 깨지지 않음(주로 사용)
베이스 스트림과 사이드 스트림
# 기반 스트림
– 목적지에서 직접 데이터를 읽고 쓸 수 있는 스트림
# 보조 스트림
직접 읽기/쓰기 기능이 없지만 기본 스트림에 추가 기능을 추가하는 스트림.
→ 상속과 유사한 ‘기능 확장’ 제공
: 대신 상속은 수직으로 확장되고 보조 스트림은 수평으로 확장됩니다(장식 패턴).
– 항상 기본 전류 또는 기타 보조 전류에 따라 다름(생성자의 매개변수로 포함)