Module  java.base
软件包  java.io

Interface ObjectInputFilter

  • Functional Interface:
    这是一个功能界面,因此可以用作lambda表达式或方法引用的赋值对象。


    @FunctionalInterface
    public interface ObjectInputFilter
    反序列化过程中过滤类,数组长度和图形指标。 如果设置为ObjectInputStream ,则调用checkInput(FilterInfo)方法来验证类,每个数组的长度,从流中读取的对象数,图形的深度以及从流中读取的总字节数。

    可以通过setObjectInputFilter为单个ObjectInputStream设置过滤器。 可以通过Config.setSerialFilter设置一个过滤器,以影响不另外设置过滤器的每个ObjectInputStream

    一个过滤器确定参数是ALLOWED还是REJECTED并返回相应的状态。 如果过滤器无法确定状态,则应返回UNDECIDED 过滤器应设计用于特定用例和预期类型。 专为特定用途设计的过滤器可以传递超出过滤器范围的类。 如果过滤器的目的是黑名单,那么它可以拒绝匹配的候选类,并为其他人报告UNDECIDED。 可以用类被称为过滤等于nullarrayLength等于-1,深度,引用的数量,以及流大小,并返回反映只有一个或只有一些值的状态。 这允许过滤器具体关于其报告的选择,并使用其他过滤器,而不强制允许或拒绝状态。

    通常,自定义过滤器应该检查是否配置了过程范围的过滤器,如果是,则过滤器过滤器被配置。 例如,

       ObjectInputFilter.Status checkInput(FilterInfo info) { ObjectInputFilter serialFilter = ObjectInputFilter.Config.getSerialFilter(); if (serialFilter != null) { ObjectInputFilter.Status status = serialFilter.checkInput(info); if (status != ObjectInputFilter.Status.UNDECIDED) { // The process-wide filter overrides this filter return status; } } if (info.serialClass() != null && Remote.class.isAssignableFrom(info.serialClass())) { return Status.REJECTED; // Do not allow Remote objects } return Status.UNDECIDED; }  

    除非另有说明,否则将null参数传递给此接口中的方法及其嵌套类将导致抛出NullPointerException

    从以下版本开始:
    9
    另请参见:
    ObjectInputStream.setObjectInputFilter(ObjectInputFilter)