Java I/O 스트림 개요

Java에서 데이터 가져오기

Anthony Markham

VP Quant Developer

스트림 기초

  • 스트림은 FIFO(선입선출) 순서의 단방향 데이터 파이프
  • 바이트 스트림은 원시 이진 데이터 처리 (InputStream/OutputStream)
  • 문자 스트림은 인코딩을 자동 처리 (Reader/Writer)

스트림 표현

Java에서 데이터 가져오기

바이트 스트림

  • 이진 데이터(이미지, 오디오 등)에 사용
  • 기본 추상 클래스: InputStream(읽기), OutputStream(쓰기)
  • 주요 구현: FileInputStream, FileOutputStream
  • 핵심 메서드: read()는 바이트 반환, write()는 바이트 출력

바이너리 파일: 이미지와 오디오

Java에서 데이터 가져오기

바이트 스트림

try (FileInputStream fis = new FileInputStream("data.bin")) {

byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) { // Process bytes in buffer
System.out.println("Read " + bytesRead + " bytes"); }
} catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Java에서 데이터 가져오기

문자 스트림

  • 텍스트 데이터 전용 설계
  • 기본 추상 클래스: Reader(텍스트 읽기), Writer(텍스트 쓰기)
  • 주요 구현: FileReader, FileWriter, BufferedReader, BufferedWriter
  • 편의 메서드: readLine()으로 한 줄 읽기

CSV 파일

Java에서 데이터 가져오기

문자 스트림

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    String line;

while ((line = reader.readLine()) != null) { // Process each line System.out.println(line); }
} catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Java에서 데이터 가져오기

버퍼드 스트림 - 성능

  • 디스크 작업을 줄여 성능 향상
  • BufferedInputStream, BufferedOutputStream으로 바이트 스트림 읽기/쓰기
  • BufferedReader, BufferedWriter문자 스트림 읽기/쓰기
    • readLine()으로 한 줄 전체 읽기
Java에서 데이터 가져오기

버퍼드 스트림 - 성능

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    // Header processing
    String header = reader.readLine();
    System.out.println("Header: " + header);

// Efficient data reading String line; int count = 0; while ((line = reader.readLine()) != null) { count++; } System.out.println("Read " + count + " data rows"); } catch (Exception e) { System.out.println("Error: " + e.getMessage()); }
Java에서 데이터 가져오기

스트림 체이닝

  • 체인의 각 스트림이 고유 기능을 추가함
  • 일반 패턴: FileInputStream -> InputStreamReader -> BufferedReader
  • 가장 바깥 스트림만 닫으면 나머지는 자동으로 닫힘
Java에서 데이터 가져오기

스트림 체이닝

import java.nio.charset.StandardCharsets;
try (

BufferedReader reader = new BufferedReader(
new InputStreamReader(
new FileInputStream("data.csv"),
StandardCharsets.UTF_8 )
)
) { String line; while ((line = reader.readLine()) != null) { System.out.println(line);} } catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Java에서 데이터 가져오기

예외 처리

  • I/O 작업에 필수
  • 흔한 예외: IOException, FileNotFoundException
  • 예외 처리는 항상 try-with-resources 사용
Java에서 데이터 가져오기

예외 처리

import java.util.ArrayList;
import java.util.List;
public static List<String> readLines(String filePath) throws IOException {

List<String> lines = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { lines.add(line); } } // Stream automatically closed here return lines;
}
Java에서 데이터 가져오기

Ayo berlatih!

Java에서 데이터 가져오기

Preparing Video For Download...