2

MalformedDataException拡張する例外 ( ) がありますIOException。コードのどこかでスローされ、次のようにメイン クラスによって一時的に「キャッチ」されます。

public static void main(String[] args) throws MalformedDataException { ... }

しかし、入出力例外とは正確には何ですか? いつ投げる必要がありますか?拡張する必要がありますか?

Oracle のドキュメントでは、それについて何も説明されていません。

4

1 に答える 1

4

入出力例外とは、通常の入出力操作を台無しにしてしまったものです。閉じられたファイルからの読み取り、削除されたファイルからの読み取り、閉じられたソケットからの読み取り、読み取りまたは書き込みで問題が発生する可能性のあるほぼすべてのシナリオを含む、さまざまなシナリオをカバーするために意図的にあいまいです。何にでも。

障害から回復できるコードを作成する場合 (ネットワーク接続が不良読み取り時に再接続を試みるなど)、IOException処理を続行するには、「回復」手順をキャッチして実行する必要があります。実際に障害から回復しない場合は、(おそらく) IOExceptionmethod をマークして次のレベルに上昇させる必要がありthrows IOExceptionます。

それらをキャプチャIOExceptionsして何もしないことは、デバッグが難しい本当に悪いバグのレシピです. あなたは警告されました。やらないでください。

IOExceptionスローされる「新しい」例外が入力/出力の不安定性に起因する障害の影響を受けるというまれな状況がない限り、を拡張しないでください。の場合、MalformedDataExceptionそれがスローされる理由は、入力から期待したものとは違うものを読み取ったためです。

通常、入力と出力は回線干渉の影響を受けるため、 がIOException不正な形式のデータに適しているかどうかについては、いくつかの論争があります。私は個人的に物事の「不適切」な側面に傾倒しています。これは、人々がデータの完全性ではなく、行の完全性に疑問を抱く傾向があるためです。

于 2013-07-01T20:45:44.983 に答える