I/O 버퍼에 대해 자세히 조사하기 전에, 그들이 무엇을 해야 하는지 이해해야만 합니다.
Java I/O 버퍼는 자바의 기본 구성 요소입니다. 핵심은 버퍼는 입력 및 출력 장치 사이의 전송되고 있는 메모리 영역입니다. 그들은 애플리케이션 및 데이터 소스 또는 대상 사이의 브리지 역할을 효율적으로 관리할 수 있습니다.
이제 버퍼(Buffer)가 무엇을 제공하는지 알고 있는 가시죠.
성능 최적화 : I/O 버퍼를 사용하는 기본 장점은 성능 최적화입니다. 메모리에 데이터를 일시적으로 저장함으로써 실제 입력 또는 출력 장치에 대한 상호 작용 주파수가 크게 향상됩니다.
시스템 호출 : I/O 작업이 종종 리소스 집약적일 수 있는 시스템 호출이 포함됩니다. I/O 버퍼가 필요한 시스템 호출 수를 줄이고 리소스는 무거워집니다.
간소화된 데이터 프로세스 : I/O 버퍼는 더 효율적인 대량의 데이터를 읽을 수 있으며, 오버헤드를 줄이고 데이터 프로세스를 더욱 효율적으로 만들 수 있습니다.
3. Java 프로그램에 I/O 버퍼를 구현합니다.
BufferedReader 객체생성
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
String filePath = "example.txt"; // 읽을 파일의 경로
try {
// BufferedReader로 FileReader를 래핑하여 버퍼를 생성
BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
// 이제 bufferedReader를 사용하여 파일에서 데이터를 읽을 수 있습니다.
// 리소스 정리
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
BufferedWriter 객체생성
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterExample {
public static void main(String[] args) {
String filePath = "output.txt"; // 쓸 파일의 경로
try {
// BufferedWriter로 FileWriter를 래핑하여 버퍼를 생성
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath));
// 이제 bufferedWriter를 사용하여 파일에 데이터를 쓸 수 있습니다.
// 리소스 정리
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
이제 I/O 버퍼의 중요성에 대해 소중함을 느낍니다.
자바에서 I/O 버퍼링을 구현하려면 Bufferwriter와 같은 클래스를 사용할 수 있습니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedReadWriteExample {
public static void main(String[] args) {
String sourceFilePath = "source.txt"; // 읽을 파일의 경로
String targetFilePath = "target.txt"; // 쓸 파일의 경로
try {
// 파일에서 읽기 위해 BufferedReader를 사용
BufferedReader reader = new BufferedReader(new FileReader(sourceFilePath));
// 파일에 쓰기 위해 BufferedWriter를 사용
BufferedWriter writer = new BufferedWriter(new FileWriter(targetFilePath));
String line;
// 한 줄씩 읽어서 다른 파일에 쓰기
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine(); // 줄 바꿈 추가
}
// 리소스 정리
reader.close();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
이 코드는 BufferedReader를 사용하여 source.txt 파일에서 한 줄씩 읽어오고, BufferedWriter를 사용하여 target.txt 파일에 데이터를 쓰는 간단한 예제입니다. 코드를 실행하려면 source.txt 파일을 생성하고 그 안에 텍스트를 작성해야 합니다. 그런 다음 코드를 실행하면 target.txt 파일에 source.txt의 내용이 복사됩니다. 이렇게 하면 입출력 속도가 향상되고 데이터가 효율적으로 처리됩니다.
이 클래스는 파일 입력스트림 및 파일 출력 스트림과 같은 다른 입력 및 출력 스트림을 포장하여 버퍼링 기능을 제공합니다. 버퍼 클래스에 기존 스트림을 통과하여 버퍼 클래스에 버퍼 클래스를 생성할 수 있습니다.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
String filePath = "example.txt"; // 읽을 파일의 경로
try {
// 파일에서 읽기 위해 FileReader를 사용
FileReader fileReader = new FileReader(filePath);
// BufferedReader로 FileReader를 래핑하여 버퍼를 생성
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line;
// 한 줄씩 읽어오며 출력
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
// 리소스 정리
bufferedReader.close();
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
이것은 파일, 네트워크 연결, 네트워크 연결, 네트워크 연결 및 기타 데이터 소스를 효율적으로 읽을 수 있습니다.
엑셀다운로드 예제
※ 디펜던시(dependency) 의존성 주입(pom.xml)
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.0.0</version>
</dependency>
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import javax.servlet.http.HttpServletResponse;
public class ExcelDownloadExample {
public static void main(String[] args) {
try {
// 엑셀 워크북 생성
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Sample Sheet");
// 엑셀 셀에 데이터 추가
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Hello");
cell = row.createCell(1);
cell.setCellValue("World");
// 파일로 저장하지 않고 바로 다운로드
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
// HttpServletResponse를 사용하여 브라우저에 전송
HttpServletResponse response = getHttpServletResponse(); // 이 부분은 실제 웹 애플리케이션에서 구현되어야 합니다
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=sample.xlsx");
// 출력 스트림에 데이터 쓰기
OutputStream outStream = response.getOutputStream();
outputStream.writeTo(outStream);
outStream.flush();
// 리소스 정리
outStream.close();
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// HttpServletResponse를 가정한 메서드 (웹 애플리케이션에서 사용)
private static HttpServletResponse getHttpServletResponse() {
// 웹 애플리케이션의 HttpServletResponse 객체를 얻는 로직
// 실제 웹 애플리케이션에서는 서블릿, 스프링 MVC, JSP 등을 통해 얻을 수 있습니다.
// 이 예제에서는 가정적으로 메서드를 만들었으므로 실제 사용 시에 맞게 적절히 대체해야 합니다.
return null;
}
}
이 코드는 엑셀 워크북을 생성하고 데이터를 시트에 추가한 다음 바이트 배열을 사용하여 다운로드합니다. 실제 웹 애플리케이션에서는 HttpServletResponse를 사용하여 브라우저에 엑셀 파일을 전송합니다. 위의 getHttpServletResponse() 메서드는 실제 웹 애플리케이션에서 사용할 HttpServletResponse 객체를 얻기 위한 가정적인 메서드입니다.
이 코드를 실행하면 엑셀 파일이 브라우저에서 다운로드됩니다.
결론
결론적으로 자바 I/O 버퍼는 Java 프로그램의 성능을 최적화하기 위해 중요한 단계입니다. I/O 버퍼가 무엇인지 이해하며, 그들이 제공하는 혜택은 새로운 높이로 프로그래밍 기술을 개선할 수 있습니다. I/O 버퍼를 사용하면 데이터 전송의 효율성 및 속도를 크게 향상시킬 수 있습니다.
Spring[스프링]_Java_중복제거_ distinctByKey 사용하기 (2) | 2023.10.25 |
---|---|
Spring[스프링]_@RequiredArgsConstructor를 이용한 생성자 및 필드 주입 (3) | 2023.10.22 |
Spring[스프링]_ImmutablePair_다중객체반환과 불변성유지 (0) | 2023.10.17 |
Spring[스프링]_MAP_Collection을 효율적으로 조회하는 방법 (0) | 2023.10.16 |
Spring - 순수 JPA와 DTO를 이용한 게시판 예제 (2) | 2023.06.07 |
댓글 영역