2024. 4. 22. 17:03ㆍJava
자바 IO는 파일에서 데이터를 읽고 쓰기, 네트워크를 통한 데이터 전송, 사용자 입력 처 리 등 다양한 방법으로 사용
InputStream, OutputStream, Reader, Writer
1. byte단위 입출력 Stream
byte단위 입출력 스트림은 데이터를 바이트 단위로 읽고 쓰는 기능을 제공한다.
byte단위 입출력 스트림은 주로 이진 데이터를 다룰 때 사용된다. 이진 데이터란 텍스 트가 아닌 파일이나 네트워크 데이터 같은 것을 말합니다. 예를 들어, 이미지, 오디오 파 일, 비디오 파일 등이 이진 데이터에 해당한다.
1-1 InputStream
(1). FileInputStream: 파일로부터 바이트 단위로 데이터를 읽는 데 사용됩니다. 이 클래 스는 파일 시스템에 저장된 데이터를 읽는 기본적인 방법을 제공합니다.
(2). ByteArrayInputStream: 바이트 배열로부터 데이터를 읽습니다. 이 클래스는 메모리 에 저장된 바이트 배열로부터 데이터를 읽을 때 사용됩니다.
(3). BufferedInputStream: 버퍼링을 사용하여 입력 효율을 높입니다. 데이터를 일정량 모아두었다가 한 번에 처리함으로써, 여러 번의 작은 읽기 연산보다 더 효율적으로 데이터를 읽을 수 있습니다.
(4). DataInputStream: 기본 데이터 타입을 바이트 스트림으로부터 직접 읽을 수 있게 합 니다. 예를 들어, int , long , float 등의 타입을 읽을 때 유용합니다.
1-2 OutputStream
(1). FileOutputStream: 파일로 바이트 단위로 데이터를 쓰는 데 사용됩니다. 파일 시스 템에 데이터를 저장할 때 주로 사용되는 클래스입니다.
(2). ByteArrayOutputStream: 바이트 배열에 데이터를 씁니다. 이 클래스는 메모리 내에 서 데이터를 바이트 배열로 만들어내는 데 사용됩니다.
(3). BufferedOutputStream: 버퍼링을 사용하여 출력 효율을 높입니다. 데이터를 일정량 모아두었다가 한 번에 쓰기 연산을 수행함으로써, 여러 번의 작은 쓰기 연산보다 더 효율적으로 데이터를 출력할 수 있습니다.
(4). DataOutputStream: 기본 데이터 타입을 바이트 스트림으로 쓸 수 있게 합니다. int , long , float 등의 데이터 타입을 바이트 스트림에 쉽게 쓸 수 있게 해줍니다.
package com.example.day12;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamExam {
public static void main(String[] args) {
//파일로 부터 읽어서 -- 입력 통로가 필요
//파일에 쓴다. -- 출력 통로가 필요
//FileInputStream 과 FileOutputStream 은 각각 파일로부터 바이트 단위로 데이터를 읽고 쓰는 데 사용됩니다.
FileInputStream fis = null;
FileOutputStream fos = null;
//try-catch 블록은 입출력 작업 중 발생할 수 있는 예외를 처리합니다.
try{
fis = new FileInputStream("src/com/example/day12/ReadFile.java");
fos = new FileOutputStream("src/com/example/day12/outputTile.txt");
int c ;
//fis.read() 메소드는 파일로부터 한 바이트를 읽어옵니다. 파일의 끝에 도달하면 -1 을 반환합니다.
while((c = fis.read()) != -1){
//fos.write(c) 메소드는 읽어온 바이트를 다른 파일에 씁니다.
fos.write(c);
}
} catch(Exception e){
e.printStackTrace();
} finally {
if(fis != null){ //finally 블록은 파일 스트림을 안전하게 닫기 위해 사용됩니다
try {
fis.close();
}catch (IOException e){
e.printStackTrace();
}
}
if(fos != null){
try {
fos.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
}
2. char단위 입출력 Stream
char단위 입출력 스트림은 자바에서 텍스트 데이터를 처리할 때 사용되는 입출력 방식이다.
이 스트림은 문자(character) 데이터를 읽고 쓰는 데에 최적화되어 있으며, 주로 텍 스트 파일이나 문자열 데이터를 다룰 때 사용된다.
2-1 Reader
(1). FileReader: 텍스트 파일로부터 데이터를 읽기 위해 사용됩니다. 파일의 텍스트 내용 을 한 문자씩 읽거나, 문자 배열을 통해 한 번에 여러 문자를 읽을 수 있습니다.
(2). StringReader: 문자열로부터 데이터를 읽습니다. 문자열 내의 데이터를 순차적으로 읽어 처리하는 데 사용됩니다.
(3). BufferedReader: 입력 데이터를 버퍼에 저장하여 효율적으로 읽을 수 있게 합니다. readLine 메소드를 통해 한 줄씩 읽는 기능이 자주 사용되며, 텍스트 파일을 효율적 으로 처리하는 데 적합합니다.
(4). InputStreamReader: byte 스트림을 문자 스트림으로 변환하는 데 사용됩니다. 이 클 래스는 바이트 기반 스트림을 문자 기반 스트림으로 연결하는 다리 역할을 합니다.
2-2 Writer
(1). FileWriter: 텍스트 파일에 데이터를 쓰기 위해 사용됩니다. 문자 데이터를 파일에 쓸 수 있으며, 여러 쓰기 메소드를 제공합니다.
(2). StringWriter: 문자열로 데이터를 쓸 때 사용됩니다. 내부적으로 문자열 버퍼를 관리 하며, 데이터를 문자열 형태로 쉽게 작성할 수 있습니다.
(3). BufferedWriter: 데이터를 내부 버퍼에 저장한 후 한 번에 쓰기를 수행합니다. 이 방 식은 여러 번의 작은 쓰기 연산보다 효율적이며, 특히 파일 쓰기 작업에 유용합니다.
(4). OutputStreamWriter: 문자 스트림을 바이트 스트림으로 변환하는 데 사용됩니다. 이 클래스는 문자 기반 데이터를 바이트 기반 스트림으로 쓸 때 필요합니다.
package com.example.day12;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CharStreamExam {
public static void main(String[] args) {
//FileReader 는 텍스트 파일로부터 문자 데이터를 읽는 데 사용됩니다. 파일에서 한 문자씩 데이터를 읽어들입니다.
//FileWriter 는 텍스트 파일에 문자 데이터를 쓰는 데 사용됩니다. 파일에 한 문자씩 데이터를 씁니다.
//try-catch 블록은 파일 입출력 과정에서 발생할 수 있는 예외를 처리합니다.
try(FileReader reader = new FileReader("a.txt");
FileWriter writer = new FileWriter("c.txt")){
int c;
//reader.read() 메소드는 파일에서 한 문자를 읽고, 파일의 끝에 도달하면 -1 을 반환합니다.
while((c=reader.read()) != -1) {
writer.write(c); //writer.write(c) 메소드는 읽은 문자를 새로운 파일에 씁니다.
}
}catch (IOException e){
e.printStackTrace();
}
}
}
*BufferedReader 와 InputStreamReader 를 사용하여 System.in 으로부터 사용자의 입력을 받는 방법
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class SystemIOExample {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("문자열을 입력하세요: ");
String userInput = reader.readLine();
System.out.println("입력받은 문자열: " + userInput);
} catch (IOException e) {
System.err.println("입력 오류가 발생했습니다: " + e.getMessage());
} finally {
try {
reader.close();
} catch (IOException e) {
System.err.println("리더를 닫는 중 오류가 발생했습니다: " + e.getMessage());
}
}
}
}
'Java' 카테고리의 다른 글
멀티 스레드(Thread) (1) | 2024.04.22 |
---|---|
내부 클래스 (0) | 2024.04.16 |
예외처리(Exception) (1) | 2024.04.16 |
인터페이스(Interface) (0) | 2024.04.16 |
추상 클래스 (0) | 2024.04.16 |