gpt4 book ai didi

java - 实现 readObject 和 writeObject 方法以覆盖 java 中的默认序列化时允许异常吗?

转载 作者:行者123 更新时间:2023-12-01 13:35:52 24 4
gpt4 key购买 nike

我知道我们必须定义具有以下签名的方法来覆盖默认的序列化过程:

private void writeObject(ObjectOutputStream os) {
}

private void readObject(ObjectInputStream is) {
}

上述方法抛出的异常类型有什么限制吗?我知道方法抛出的异常不是方法签名的一部分,但想确认一下。

最佳答案

Serializable定义以下异常:

private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
<小时/>

这是调用 write 方法的地方:

        try {
writeObjectMethod.invoke(obj, new Object[]{ out });
} catch (InvocationTargetException ex) {
Throwable th = ex.getTargetException();
if (th instanceof IOException) {
throw (IOException) th;
} else {
throwMiscException(th);
}
}

// ...

private static void throwMiscException(Throwable th) throws IOException {
if (th instanceof RuntimeException) {
throw (RuntimeException) th;
} else if (th instanceof Error) {
throw (Error) th;
} else {
IOException ex = new IOException("unexpected exception type");
ex.initCause(th);
throw ex;
}
}

正如您所看到的,您可以抛出任何非运行时异常,并且它将被包装在 IOException 中,尽管您应该更喜欢 IOException,因为它具有更短的堆栈跟踪和更有用的错误消息。

我假设 read 方法被类似地调用,不过你可能想自己检查一下。

关于java - 实现 readObject 和 writeObject 方法以覆盖 java 中的默认序列化时允许异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com