# 6 `cStringIO` -- 高速化された `StringIO`

`cStringIO` モジュールは `StringIO` モジュールと同様の インターフェースを提供しています。 `StringIO.StringIO` オブジェクトを酷使する場合、 このモジュールにある `StringIO()` 関数をかわりに使うと効果的です。

このモジュールは、ビルトイン型のオブジェクトを返すファクトリー関数を提供しているので、 サブクラス化して自分用の物を作ることはできません。 そうした場合には、オリジナルの `StringIO` モジュールを使ってください。

`StringIO` モジュールで実装されているメモリファイルとは異なり、 このモジュールで提供されているものは、プレイン ASCII 文字列にエンコードできない ユニコードを受け付けることができません。

また、引数に文字列を指定して`StringIO()`呼び出すと読み出し専用のオブジェクト が生成されますが、この場合 `cStringIO.StringIO()` では write()メソッドを持たない オブジェクトを生成します。 これらのオブジェクトは普段は見えません。 トレースバックに `StringI` と `StringO` として表示されます。

次にあげるデータオブジェクトも提供されています:

`InputType`
  文字列をパラメーターに渡して `StringIO` を呼んだときに作られるオブジェクトの オブジェクト型。

`OutputType`
  パラメーターを渡さすに `StringIO` を呼んだときに返されるオブジェクトの オブジェクト型。

このモジュールには C API もあります。詳しくはこのモジュールのソースを参照してください。

使用例:

    import cStringIO

    output = cStringIO.StringIO()
    output.write('First line.\n')
    print >>output, 'Second line.'

    # ファイルの内容を取り出す -- ここでは
    # 'First line.\nSecond line.\n'
    contents = output.getvalue()

    # オブジェクトを閉じてメモリバッファを解放する --
    # 以降 .getvalue() は例外を送出するようになる。
    output.close()