読者です 読者をやめる 読者になる 読者になる

順次、選択、そして繰り返し

プログラミングのことやITのこと、たまに演劇のことも書きます。

入出力ストリームについて(Java)

ファイル操作で色々とお世話になる入出力ストリーム。

何気なくストリームを使用していたので、理解していない部分が多くあったので
自分なりにまとめてみた。

まず、ストリームってなんだ……。

【ストリーム】

ストリーム(Stream)とは川や液体などの流れという意味。
入出力されるデータは川の流れのように流れるかららしい……。


そして、ストリームには2つの種類がある。

  • 文字ストリーム
  • バイトストリーム


【文字ストリーム】
16ビット単位のデータ(文字)がストリームとなって次々と流れていく。


【バイトストリーム】
8ビット単位のデータ(bytes)がストリームとなって次々と流れていく。

バイトストリームは処理の対象がファイルであろうとネットワークであろうと
同じように扱える。


そして、バッファ……

【バッファ】
データを一時的に記憶する場所。バッファを使用することでファイルにいちいちアクセスしなくても一気にデータを読み込んで貯めこむことができる。


【文字ストリームの種類】

*1処理の流れについて


バッファリングを行い、効率的な処理を行う

  • BufferedReader 【入力】
  • BufferedWriter 【出力】


読み込みの間に行番号を管理する

  • LineNumberReader 【入力】


既存の配列をストリームとして扱う

  • CharArrayReader 【入力】
  • CharArrayWriter 【出力】


ファイルをストリームとして扱う

  • FileReader 【入力】
  • FileWriter 【出力】


ストリームにフィルタ処理を行う

  • FilterReader 【入力】
  • FilterWriter 【出力】


データの先読み処理を行う

  • PushbackReader 【入力】


パイプによる操作を行う

  • PipedReader 【入力】
  • PipedWriter 【出力】


メモリ内のStringをストリームとして扱う

  • StringReader 【入力】
  • StringWriter 【出力】


データを出力する

  • PrintWriter 【出力】


【バイトストリームの種類】

バッファリングを行い、効率的な処理を行う

  • BufferedInputStream 【入力】
  • BufferedOutputStream 【出力】


読み込みの間に行番号を管理する

  • LineNumberInputStream 【入力】


既存の配列をストリームとして扱う

  • ByteArrayInputStream 【入力】
  • ByteArrayOutputStream 【出力】


ファイルをストリームとして扱う

  • FileInputStream 【入力】
  • FileOutputStream 【出力】


ストリームにフィルタ処理を行う

  • FilterInputStream 【入力】
  • FilterOutputStream 【出力】


データの先読み処理を行う

  • PushbackInputStream 【入力】


パイプによる操作を行う

  • PipedInputStream 【入力】
  • PipedOutputStream 【出力】


メモリ内のStringをストリームとして扱う

  • StringBufferInputStream 【入力】


データを出力する

  • PrintStream 【出力】


文字ストリームとバイトストリームを連携する

  • InputStreamReader 【入力】
  • OutputStreamWriter 【出力】


オブジェクトをストリームから読み書きする

  • ObjectInputStream 【入力】
  • ObjectOutputStream 【出力】


環境に依存しないデータの読み書きを行う

  • DataInputStream 【入力】
  • DataOutputStream 【出力】


複数の読み込みストリームを集約する

  • SequenceInputStream 【入力】


【ファイルを文字ストリームとして読み込む】
ファイル(.txt)

↓入力(読み込み)

FileInputStreamクラス

byteのストリーム

BufferedInputStreamクラス
バッファを用いた効率的な読み込み

byteのストリーム

InputStreamReaderクラス
byteストリームから文字ストリームへの橋渡しの役目(文字エンコード)

文字ストリーム

Readerクラス

ソースコードのイメージ

 Reader reader = new InputStreamReader(
     new BufferedInputStream(
         new FileInputStream("ファイル名.txt")), "UTF-8");


【バッファリングを用いてファイルを文字ストリームとして読み込む】
ファイル(.txt)

↓入力(読み込み)

FileInputStreamクラス

byteのストリーム

InputStreamReaderクラス
byteストリームから文字ストリームへの橋渡しの役目(文字エンコード)

文字ストリーム

BufferedReaderクラス
バッファを用いた効率的な読み込み

文字ストリーム

BufferedReaderクラス

ソースコードのイメージ

 BufferedReader bufferedReader = new BufferedReader(
     new InputStreamReader(
         new FileInputStream("ファイル名.txt"), "UTF-8"));


以上。なんとなくではあるが少しは整理できたと思う……。


参考にしたサイト

プログラマーの常識をJavaで身につける(7):プログラマーの“宿命”? ファイル操作に関する常識 (2/4) - @IT

ストリームでの入出力処理の基本 (1/3):CodeZine(コードジン)

Javaの道:入出力(4.バッファ入出力)

*1:【入力】処理の対象→Javaプログラム 【出力】Javaプログラム→処理の対象