1. 입출력 스트림
- 자바에서 데이터 입출력은 스트림(Stream)을 통해 이루어진다.
- 스트림은 데이터를 연속적으로 읽고 쓰는 데 사용되는 흐름을 의미한다.
- 입출력 스트림은 크게 바이트 스트림과 문자 스트림으로 나뉜다.
- OutputStream은 바이트 단위의 데이터를 출력하기 위한 스트림이다.
- 이 클래스는 파일이나 네트워크로 데이터를 보낼 때 사용되며, 다양한 하위 클래스들이 있다.
try (FileOutputStream fos = new FileOutputStream("output.txt")) {
String data = "Hello, Java!";
fos.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
- 위 예제에서 FileOutputStream을 사용하여 문자열을 파일에 바이트 단위로 출력하고 있다.
- InputStream은 바이트 단위의 데이터를 입력받기 위한 스트림이다.
- 파일, 네트워크, 메모리 등에서 바이트 데이터를 읽을 수 있다.
try (FileInputStream fis = new FileInputStream("input.txt")) {
int data;
while ((data = fis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
- 위 예제에서 FileInputStream을 사용하여 파일에서 데이터를 읽고, 한 바이트씩 출력하고 있다.
- Writer는 문자 데이터를 출력하기 위한 스트림이다.
- 바이트 단위가 아닌 문자 단위로 데이터를 다루기 때문에 텍스트 데이터를 다룰 때 적합하다.
try (FileWriter writer = new FileWriter("output.txt")) {
writer.write("Hello, Java!");
} catch (IOException e) {
e.printStackTrace();
}
- FileWriter를 사용하여 문자열을 파일에 문자 단위로 출력하고 있다.
- Reader는 문자 데이터를 입력받기 위한 스트림이다.
- 파일이나 다른 입력 소스로부터 텍스트를 읽는 데 사용된다.
try (FileReader reader = new FileReader("input.txt")) {
int data;
while ((data = reader.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
- FileReader를 사용하여 파일에서 문자 데이터를 읽고 출력하는 예제이다.
2. 보조 스트림
- 보조 스트림은 기본 스트림에 추가적인 기능을 제공하기 위해 사용된다.
- 보조 스트림은 기본 스트림과 연결하여 데이터의 필터링, 버퍼링, 변환 등의 기능을 제공한다.
try (FileInputStream fis = new FileInputStream("input.txt");
BufferedInputStream bis = new BufferedInputStream(fis)) {
int data;
while ((data = bis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
- 위 예제에서는 BufferedInputStream을 사용하여 FileInputStream에 버퍼링 기능을 추가하였다.
- 이를 통해 입출력 성능을 향상시킬 수 있다.
- InputStreamReader와 OutputStreamWriter는 바이트 스트림을 문자 스트림으로 변환하는 보조 스트림이다.
- 이를 통해 바이트 데이터를 문자 데이터로 처리할 수 있다.
try (InputStreamReader isr = new InputStreamReader(new FileInputStream("input.txt"), "UTF-8")) {
int data;
while ((data = isr.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
- 위 코드에서 InputStreamReader를 사용하여 바이트 데이터를 문자로 변환하고 UTF-8 인코딩을 지정하여 읽고 있다.
- BufferedInputStream과 BufferedOutputStream은 데이터 입출력 시 버퍼링을 제공하여 성능을 향상시키는 보조 스트림이다.
- 버퍼링을 통해 입출력 작업의 효율성을 크게 높일 수 있다.
- DataInputStream과 DataOutputStream은 기본 타입 데이터를 읽고 쓸 수 있는 보조 스트림이다.
- 이를 통해 int, double, boolean 등의 기본 타입을 파일에 쉽게 저장하고 읽을 수 있다.
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.bin"))) {
dos.writeInt(100);
dos.writeDouble(3.14);
} catch (IOException e) {
e.printStackTrace();
}
- 위 예제에서 DataOutputStream을 사용하여 정수와 실수를 파일에 저장하고 있다.
- PrintStream과 PrintWriter는 포맷된 문자열을 출력하기 위한 보조 스트림이다.
- println() 메소드를 통해 다양한 데이터 타입을 쉽게 출력할 수 있다.
try (PrintWriter pw = new PrintWriter(new FileWriter("output.txt"))) {
pw.println("Hello, Java!");
pw.printf("숫자: %d, 실수: %.2f%n", 100, 3.14);
} catch (IOException e) {
e.printStackTrace();
}
- 위 코드에서 PrintWriter를 사용하여 문자열을 포맷하여 파일에 출력하고 있다.
- ObjectInputStream과 ObjectOutputStream은 객체를 직렬화하여 파일에 저장하거나 읽어 들이는 보조 스트림이다.
- 이를 통해 객체 자체를 입출력할 수 있다.
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) {
oos.writeObject(new String("Hello, Java!"));
} catch (IOException e) {
e.printStackTrace();
}
- 위 예제에서는 ObjectOutputStream을 사용하여 String 객체를 파일에 저장하고 있다.
- 이때 객체는 직렬화가 가능해야 하며, 클래스는 Serializable 인터페이스를 구현해야 한다.
3. 입출력 관련 API
- System.in은 표준 입력 스트림으로, 주로 콘솔로부터 입력을 받을 때 사용된다.
- 기본적으로 바이트 스트림이기 때문에 문자 데이터를 처리하려면 InputStreamReader와 같은 보조 스트림을 사용해야 한다.
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
try {
String input = br.readLine();
System.out.println("입력된 값: " + input);
} catch (IOException e) {
e.printStackTrace();
}
- 위 예제에서는 BufferedReader를 사용하여 콘솔로부터 문자열을 입력받고 있다.
- System.out은 표준 출력 스트림으로, 콘솔에 데이터를 출력할 때 사용된다.
- print(), println() 메소드를 통해 다양한 데이터를 출력할 수 있다.
System.out.println("Hello, Java!");
System.out.printf("숫자: %d, 실수: %.2f%n", 100, 3.14);
- 위 코드에서는 System.out을 사용하여 문자열을 출력하고 있다.
- Scanner 클래스는 키보드로부터 입력을 쉽게 받을 수 있는 기능을 제공한다.
- System.in과 함께 사용하여 콘솔 입력을 처리한다.
Scanner scanner = new Scanner(System.in);
System.out.print("숫자를 입력하세요: ");
int number = scanner.nextInt();
System.out.println("입력된 숫자: " + number);
- 위 예제에서 Scanner 클래스를 사용하여 사용자가 입력한 숫자를 처리하고 있다.
- File 클래스는 파일과 디렉토리를 다루기 위한 기능을 제공한다.
- 파일 생성, 삭제, 경로 확인 등 파일 시스템을 조작하는 다양한 메소드를 제공한다.
File file = new File("example.txt");
if (file.exists()) {
System.out.println("파일이 존재합니다.");
} else {
System.out.println("파일이 존재하지 않습니다.");
}
- 위 코드에서 File 클래스를 사용하여 특정 파일이 존재하는지 확인하고 있다.
'IT & AI > AI 지식' 카테고리의 다른 글
JAVA 기본 API, 스레드, 컬렉션 프레임워크 (0) | 2024.11.22 |
---|---|
JAVA 인터페이스, 중첩 클래스, 예외 처리 방법 (0) | 2024.11.22 |
JAVA 객체 지향 프로그래밍: 클래스, 상속 (0) | 2024.11.21 |
JAVA 조건문, 반복문, 참조 타입(배열) 정리 (2) | 2024.11.21 |
JAVA 초보자를 위한 변수, 연산자, 데이터 입출력 이해 (1) | 2024.11.20 |