使用socket进行对象的写入的时候,因为对象类型为Method导致的异常问题

  我在使用socket进行对象的写入的时候,出现了异常:java.io.NotSerializableException: java.lang.reflect.Method,

我的对象是这样的:

@Data
public class InvokeParam implements Serializable {

    private String name;

    private Method method;

    private Object[] args;
}

 

后面调试代码发现,写入对象的时候,会将对象所有的属性记性判断,然后一个个的写入。

在写入stream的方法里是这样的代码:

 // remaining cases
            if (obj instanceof String) {
                writeString((String) obj, unshared);
            } else if (cl.isArray()) {
                writeArray(obj, desc, unshared);
            } else if (obj instanceof Enum) {
                writeEnum((Enum<?>) obj, desc, unshared);
            } else if (obj instanceof Serializable) {
                writeOrdinaryObject(obj, desc, unshared);
            } else {
                if (extendedDebugInfo) {
                    throw new NotSerializableException(
                        cl.getName() + "\n" + debugInfoStack.toString());
                } else {
                    throw new NotSerializableException(cl.getName());
                }
            }

也就是说仅支持:String,数组,枚举和序列化的对象,其他对象都会报异常。

那只能讲method的属性去掉了,InvokeParam 对象代码改为:

import lombok.Data;

import java.io.Serializable;
import java.lang.reflect.Method;


@Data
public class InvokeParam implements Serializable {

    private String name;

    private Class<?>[] types;

    private String methodName;

    private Object[] args;

}

 

这样写入就正常了。

 



posted @ 2022-09-20 11:21  不加班不熬夜的男子  阅读(58)  评论(0编辑  收藏  举报