###
4.9.1.3 StreamReader オブジェクト

`StreamReader` クラスは `Codec` のサブクラスで、以下のよう なメソッドを定義します。Python の codec レジストリと互換性を保つには、こ れらのメソッド全てを定義しなければなりません。

class `StreamReader`( | stream[, errors])

  `StreamReader` インスタンスのコンストラクタ。

  全てのストリーム・リーダは、このインターフェースを持つコンストラクタを 定義しなければいけません。キーワード引数を追加しても構いませんが、ここ で定義されているものだけが、Python の codec レジストリから使われます。

  ここでは Python の codec レジストリが使うものを説明します。

  stream は（バイナリ）データを読み込み可能なファイル的オブジェク トでなければいけません。

  The `StreamReader` は、errors キーワード引数を受けて、異なった エラー処理の仕組みを実装しても構いません。以下のパラメータは、あらか じめ定義されています。

  - `'strict'` `ValueError` (または、そのサブクラス) を発生。これがデフォルトです。
  - `'ignore'` 文字を無視して、次の文字から続ける。
  - `'replace'` 適切な置換文字で置換。

  errors 引数は、同名の属性に代入されます。この属性を変更するこ とで、`StreamReader` オブジェクトが生きている間に、異なるエ ラー処理に変更することができます。

  errors 引数が取り得る値の種類は、`register_error()` で 拡張できます。

`read`( | [size])

  ストリームからのデータをデコードし、デコード済のオブジェクトを返す。

  size は、デコードするためにストリームから読み込む、およその最大バ イト数を意味します。デコーダは、この値を適切な値に変更できます。デフォ ルト値 -1 にすると、可能な限りたくさんのデータを読み込みます。 size の目的は、巨大なファイルを1度にデコードするのを防ぐことです。

  このメソッドは貪欲な読み込み戦略を取るべきです。すなわち、エンコーディ ング定義と size の値が許す範囲で、できるだけ多くのデータを読むべきだと いうことです。たとえば、ストリーム上にエンコーディングの終端や状態の目 印があれば、それも読み込みます。

`readline`( | [size])

  入力ストリームから1行読み込み、デコード済みのデータを返す。

  `readlines()` とは異なり、このメソッドは改行情報を、元のストリ ームの `readline()` メソッドから継承します。- 行バッファの不足 のため、 現在、cedec のデコーダを使った改行のサポートはありません。し かし、サブクラスは可能であるなら、独自の改行情報を使って、このメソッド の実装を試みるべきです。

  size が与えられた場合、ストリームにおける `readline()` の size 引数に渡されます。

`readlines`( | [sizehint])

  インプットストリームから全ての行を読み込み、行のリストとして返します。

  改行は、codec デコーダ のメソッド実装され、リスト要素の中に含まれます。

  sizehint が与えられた場合、 ストリームの `read()` メソッ ドに size 引数として渡されます。

`reset`( | )

  状態保持に使われた codec のバッファをリセットする。

  ストリームの再配置を行うべきではないので注意してください。このメソッドは デコードの際のエラーから復帰できるようにすることを目的としたものです。

ここまでで挙げたメソッドに加えて、`StreamReader` は、元になってい るストリームから、他の全てのメソッドや属性を、継承しなければなりません。

次に挙げる2つの基底クラスは、利便性のために含まれています。codec レジスト リは、これらを必要としませんが、実際のところ、あると有用なものでしょう。