使用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; }
这样写入就正常了。