////////////////////////////////////////////////////////////////////////////////
// << j601.java >>
//
// ファイル処理(0)概説
//
//  ●java.ioパッケージ
//
//  ・このパッケージには、入出力のためのストリームを扱うクラスとファイル管理の
//   ためのクラスが含まれている。
//
// ●ストリーム
//    「ストリーム」は、データの流れを指す抽象的な概念である。
//  バイトストリーム(8ビット単位の入出力)と文字ストリーム(16ビット単位の
//    入出力)がある。
//    前者は、データの内部表現をそのまま出力する。たとえば、データが整数12の場合、
//  2進数表現で出力する。
//  後者は、データを文字に変換して出力する。たとえば、データが整数12の場合、
//  1の文字コード(16進数で31)と2の文字コード(16進数で32)を出力する。
//
//  ストリームのクラスは次のように分類される。
//  InputStreamクラス及びそのサブクラス   入力用 バイト単位
//    OutputStreamクラス及びそのサブクラス  出力用  バイト単位
//    Readerクラス及びそのサブクラス       入力用 文字単位
//    Writerクラスおよびそのサブクラス      出力用 文字単位
//
// ●バイトストリームを扱うクラス
//
//  ○入力用
//   InputStream     バイトストリームのスーパークラス
//   FileInputStream    ファイルからバイト単位で読み込む。
//   BufferedInputStream バイト単位の入力でバッファリングを行う。
//  ○出力用
//   OutputStream     バイトストリームのスーパークラス
//   FileOutputStream   ファイルにバイト単位で書き込む。
//   BufferedOutputStream バイト単位の出力でバッファリングを行う。
//  
// ●文字ストリームを扱うクラス
//
//  ○入力用
//   Reader       文字ストリームのスーパークラス
//   FileReader     ファイルから文字単位で読み込む。
//   BufferedReader   文字単位の入力でバッファリングを行う。
//   InputStreamReader バイト単位の入力を文字単位の入力に変換する。
//   Scanner              書式付き入力を行う。
//
//  ・クラス階層(矢印の左が親クラス、右が子クラスである)
//   java.lang.Object
//           |→java.io.Reader→java.io.BufferedReader
//                          |→java.io.InputStreamReader→java.io.FileReader
//           |→java.util.Scanner
//  ○出力用
//   Writer         文字ストリームのスーパークラス
//   FileWriter       ファイルに文字単位で書き込む。
//   BufferedWriter     文字単位の出力でバッファリングを行う。
//   OutputStreamWriter 文字単位の出力をバイト単位の出力に変換する。
//   PrintWriter         基本データ型やオブジェクトを文字にして出力する。
//
//  ・クラス階層(矢印の左が親クラス、右が子クラスである)
//   java.lang.Object
//           |→java.io.Writer→java.io.BufferedWriter
//                          |→java.io.OutputStreamWriter→java.io.FileWriter
//                          |→java.io.PrintWriter
// 
// ●バッファリング
//
//  データの入出力を効率よく行う技法。
//  ハードディスクから主記憶装置に1文字ずつ読み込むには、時間がかかる。そこで、
//  一度に数百の文字を主記憶装置に読み込んでおき、1文字ずつ処理する。この方が
//  効率がよくなる。
//  主記憶装置からハードディスクへの出力についても、1文字ずつ書き込むには
//  時間がかかる。そこで、数百文字分、主記憶装置に貯めておいてから、一度に
//  ハードディスクに書き込む。この方が効率がよくなる。
//
// ●ファイル処理プログラムの書き方
//
//    import java.io.*;
//    class クラス名 {
//    public static void main(String args[]) {
//    // 入出力操作はエラーを発生しやすいので、例外処理が必要。
//      try {
//       [処理に適切なストリームのオブジェクトの作成]
//        while([入力部]) {
//         [処理部]
//         [出力部]
//        }
//      } catch( Exception e ) {
//        [エラー処理部]
//      } 
//    }
//
////////////////////////////////////////////////////////////////////////////////