gpt4 book ai didi

java - 将对象转换为字节数组会抛出 NotSerializedException

转载 作者:行者123 更新时间:2023-12-02 06:29:08 25 4
gpt4 key购买 nike

下面的代码抛出 java.io.NotSerializedException。为什么?谢谢!

private void test3() {
Element3 element3=new Element3();
ObjectToBytes3(element3);
}

private class Element3 implements Serializable{
int code=0;
}

//-----------------------------------
private void ObjectToBytes3(Element3 elem){
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(bos);
out.writeObject(elem);
byte[] myBytes = bos.toByteArray();
}
catch (Exception e) {myPrint("exception",e.toString());}
finally {
try{
out.flush();
out.close();
bos.close();
}
catch (Exception e) {}
}
}

输出和堆栈如下:2674,25 对象转字节:2674,32异常:java.io.NotSerializedException:java.util.concurrent.ThreadPoolExecutor堆栈=java.io.NotSerializedException:java.util.concurrent.ThreadPoolExecutor 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164) 在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330)

<小时/>

这很有趣,但是下面的代码可以正常工作

================================
class My implements Serializable{
byte a=1;
int b=88;
String s="ggg";
private My(byte a1, int b1,String s1) {
a=a1;
b=b1;
s=s1;
}
}

private void test() {
My my=new My((byte)5,10,"jjj");
ObjectToBytesTest(my);
}

//-----------------------------------
private void ObjectToBytesTest(My my){
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(bos);
out.writeObject(element);
byte[] myBytes = bos.toByteArray();
}
catch (Exception e) {print("exception",e.toString());}
finally {
try{
out.flush();
out.close();
bos.close();
}
catch (Exception e) {}
}
}

最佳答案

这是因为 Element3 实例 elem 具有对外部对象的隐式引用。

当序列化Element3时使用Serialized接口(interface)的默认操作,它会序列化外部对象,而外部对象尚未实现Serialized接口(interface),因此会抛出java.io.NotSerializedException。

异常将引用未实现 Serialized 接口(interface)的外部对象的类。

在我的代码中,它是:java.io.NotSerializedException: serialized.ObjectToBytesTest

要解决这个问题,您应该将 Element3 类移出外部类,如下所示:

    public class ObjectToBytesTest {
private void ObjectToBytes3() { ... }
}

class Element3 implements Serializable {
int code=0;
}

或者就像您的解决方案(我的类实现了 Serialized 接口(interface)),但我认为不推荐使用此解决方案。

关于java - 将对象转换为字节数组会抛出 NotSerializedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20234799/

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