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() で1行全体を読み取り

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 でのデータインポート

では、練習しましょう!

Java でのデータインポート

Preparing Video For Download...