package example;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.Object;
class Utils {
public static Object copy(Object oldObj) {
Object obj = null;
try {
// Write the object out to a byte array
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(oldObj);
out.flush();
out.close();
// Retrieve an input stream from the byte array and read
// a copy of the object back in.
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream in = new ObjectInputStream(bis);
obj = in.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
}
return obj;
}
}
public class mytest {
public static void main(String[] args) throws IOException {
Object clonedObject = Utils.copy(new Object());
clonedObject.notifyAll();
}
}
上面的代码是通过将对象更改为字节数组来显示复制的深度。但myeclipse给出了以下错误信息,我不知道为什么。
java.io.NotSerializableException: java.lang.Object
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at example.Utils.copy(mytest.java:17)
at example.mytest.main(mytest.java:37)
Exception in thread "main" java.lang.NullPointerException
at example.mytest.main(mytest.java:38)
你可以帮忙吗?谢谢!
答案 0 :(得分:1)
您的对象应该实现Serializable
接口
提示:对于克隆对象,更好地实现Cloneable
接口并使用object.clone()
方法
答案 1 :(得分:1)
这意味着java.lang.Object
不可序列化,它不会实现Serializable
,可能是您将类Object
的对象传递给您的方法。
答案 2 :(得分:1)
您正在尝试序列化而不是Serializable
(也就是说,它没有实现接口Serializable
)对象
试试这个:
Object clonedObject = Utils.copy(new String("Hello");
String
课程为Serializable
答案 3 :(得分:1)
当你执行writeObject时,你编写的对象需要是Serializable。尝试将copy
- 方法的签名更改为
public static Object copy(Serializable oldObj)
错误信息会更清晰。
答案 4 :(得分:0)
Object
类未实现Serializable
接口,因此无法直接与对象流一起使用。更多详情here。
答案 5 :(得分:0)
来自ObjectOutputStream.writeObject
的{{3}}:
抛出:
NotSerializableException - 要序列化的某些对象不实现java.io.Serializable接口。
这是有道理的,因为您使用参数new Object()
调用您的方法。实际上,Object
没有实现Serializable
。但是,我想知道为什么writeObject
的签名不仅仅是
writeObject(Serializable object)
可以防止出现这种错误。
答案 6 :(得分:0)
这是说您的对象不符合序列化过程的条件,因为它没有实现Serilizable
接口。
根据java docs
java.io.NotSerializableException
当一个实例需要具有Serializable接口时抛出。序列化运行时或实例的类可以抛出此异常。