Java
입출력
by k0o9
2022. 5. 27.
I/O
- Input과 Output의 약자로 입력과 출력, 간단히 입출력이라고 한다.
- 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것.
스트림
- 데이터를 운반하는데 사용되는 연결통로
- 단방향 통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다.
- 입력을 위한 입력스트림, 출력을 위한 출력스트림이 존재한다.
- 큐와 같은 FIFO구조
바이트 기반 스트림
- InputStream, OutputStream이 있다.
- 바이트 단위로 데이터를 전송하는 스트림
보조 스트림
- 스트림의 기능을 보완하기 위해 제공.
- 실제 데이터를 주고받지 않기에 데이터를 입출력할 수 있는 기능은 없다.
- 스트림의 기능 향상 및 새로운 기능 추가
Buffer
- 바이트배열을 사용해서 일정량의 데이터의 크기만큼 모아서 전송
- 시스템 콜의 횟수가 줄어들어 성능상 이점이 생김.
Channel
- 입력과 출력을 동시에 수행한다.
- Selector와 연결되고, 하나의 Selector에 다수의 채널이 존재할 수 있다.
- Blocking된 스레드를 깨우거나 다시 Blocking 할 수 있다.
InputStream과 OutputStream
- 대표적 Byte Stream
- 각각 입력과 출력을 담당
- 모든 byteStream의 조상
Byte와 Character Stream
- 문자와 byte 입출력단위를 보완하기 위해 생긴 보조스트림이 Character Stream이다.
- byte 단위는 입출력이 1바이트 단위
- 자바의 경우 문자가 2바이트
- Character Stream은 입출력 단위가 문자 기반
- 일반적으로 ByteStream에 비해 사용이 용이하고 편리한 기능이 많다.
- 대부분의 ByteStream에 대응하는 클래스들이 있다.
표준 스트림
- 표준 입력 스트림 : System.in, InputStream
- 표준 출력 스트림 : System.out, PrintStream
- 표준 오류 스트림 : System.err, PrintStream
파일 읽고 쓰기
import java.io.*;
public class FileReadTest {
public static void main(String[] args) {
//파일 객체 생
File file = new File("파일 절대경로");
try {
//입력 스트림, 입력 버퍼 생성
FileReader fileReader = new FileReader(file);
BufferedReader br = new BufferedReader(fileReader);
String line = "";
//한줄 씩 읽기
while((line = br.readLine())!=null) {
System.out.println(line);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriteTest {
public static void main(String[] args) {
try {
//파일 객체 생성
File file = new File("파일 경로");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
if (file.isFile() && file.canWrite()) {
//쓰기
bw.write("Write 1 line");
bw.newLine();
bw.write("두번째 라인 추가");
bw.newLine();
bw.write("마지막 확인");
bw.close();
}
} catch (IOException e) {
System.out.println(e);
}
}
}