- 4.1. java.nio.charset パッケージ
- 4.2. Charset クラス
- 4.3. CharsetEncoderクラス
- 4.4. CharsetDecoderクラス
- 4.5. CoderResultクラス
4.5. CoderResultクラス
CoderResultクラスは、エンコードやデコード処理の結果を表すクラスです。
CoderResultの表すエラーは次の4種類に分類できます。
エラー種別
|
説明
|
アンダーフロー |
処理する入力がなくなった場合、または入力内容が不完全だったため補足入力が必要な場合に発生するエラーです。このエラーを表す CoderResult インスタンスは CoderResult.UNDERFLOW であり、このインスタンスに対する isUnderflow メソッドの呼び出しは true を返します。 |
オーバーフロー
|
出力バッファの容量が不足したときに発生するエラーです。このエラーを表す CoderResult インスタンスは CoderResult.OVERFLOW であり、このインスタンスに対する isOverflow メソッドの呼び出しは true を返します。 |
不正入力エラー
|
入力が正当な16ビットUnicodeシーケンスでなかった場合に発生するエラーです。このエラーを表す CoderResult インスタンスに対する isMalformed メソッド呼び出しは true を返し、length メソッドで不正なシーケンスの長さを取得することができます。 |
マップ不可文字エラー
|
入力文字シーケンスは正当であるが、指定された文字セットの文字にはマッピングされていない場合に発生するエラーです。このエラーを表す CoderResult インスタンスに対する isUnmappable メソッド呼び出しは true を返し、length メソッドでマップ不可文字を表すシーケンスの長さを取得することができます。 |
不正入力エラーおよびマップ不可文字エラーが CoderResult として返されるのは、CharsetEncoder または CharsetDecoder のそれぞれのエラーに対するアクションが CodingErrorAction.REPORT である場合のみです。IGNORE や REPLACE の場合は処理が継続され、CoderResult にはエラーは報告されません。
CoderResult クラスには isError というメソッドがありますが、これは不正入力エラーまたはマップ不可文字エラーを表す場合に true を返すメソッドです。アンダーフローやオーバーフローの場合には false を返すので注意してください。
(実習課題2)
実習課題1のプログラムに変更を加え、デコードおよびエンコードの際に不正入力エラーやマップ不可文字エラーが発生した場合は、「■」という文字に置換するようにしなさい。カッコ株(「(株)」を一文字にしたもの)や丸数字(○の中に数字の書かれた文字)の入ったファイルを変換することで動作確認できます。