個別のストリームのカスタム・フィルタの設定

ストリームへの入力が信頼されず、フィルタにクラスの限定セットがあったり、制約が施行される場合、個別のObjectInputStreamにフィルタを設定できます。たとえば、ストリームに数値、文字列およびその他のアプリケーションに固有のタイプのみが確実に含まれるようにできます。

setObjectInputFilterメソッドを使用して、カスタム・フィルタが設定されます。オブジェクトがストリームから読み取られる前にカスタム・フィルタを設定する必要があります。

次の例では、setObjectInputFilter メソッドがdateTimeFilterメソッドを使用して呼び出されます。このフィルタは、java.timeパッケージのクラスのみを受け入れます。dateTimeFilterメソッドは、メソッドとしてのカスタム・フィルタの設定のコード・サンプルで定義されています。

    LocalDateTime readDateTime(InputStream is) throws IOException {
        try (ObjectInputStream ois = new ObjectInputStream(is)) {
            ois.setObjectInputFilter(FilterClass::dateTimeFilter);
            return (LocalDateTime) ois.readObject();
        } catch (ClassNotFoundException ex) {
            IOException ioe = new StreamCorruptedException("class missing");
            ioe.initCause(ex);
            throw ioe;
        }
    }