Java 使用静态方法执行文件I/O时出现NotSerializableException
所以,我有两个类,我声明它们是静态的(通过使它们的方法是静态的,它们的构造函数是私有的),Synchronizer和UserProfile。同步器的saveData()函数调用UserProfile的saveData()函数:Java 使用静态方法执行文件I/O时出现NotSerializableException,java,static,io,notserializableexception,Java,Static,Io,Notserializableexception,所以,我有两个类,我声明它们是静态的(通过使它们的方法是静态的,它们的构造函数是私有的),Synchronizer和UserProfile。同步器的saveData()函数调用UserProfile的saveData()函数: private static void saveData(){ UserProfile.saveData(data, dataFile); } 这是UserProfile.saveData(…): Synchronizer和UserProfile都实现Seria
private static void saveData(){
UserProfile.saveData(data, dataFile);
}
这是UserProfile.saveData(…):
Synchronizer和UserProfile都实现Serializable并具有自动生成的serialVersionUID
有什么帮助吗?我很确定我做了一些根本错误的事情
编辑:这是输出
Restoring sync data
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.jsoup.nodes.Document
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at java.util.ArrayList.readObject(ArrayList.java:733)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at UserProfile.restoreData(UserProfile.java:93)
at Synchronizer.restoreData(Synchronizer.java:74)
at Processor.<init>(Processor.java:8)
at CommandLine.<init>(CommandLine.java:15)
at TuneSnatch.main(TuneSnatch.java:5)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.io.NotSerializableException: org.jsoup.nodes.Document
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at java.util.ArrayList.writeObject(ArrayList.java:710)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at UserProfile.saveData(UserProfile.java:80)
at Synchronizer.saveData(Synchronizer.java:87)
at Synchronizer.addHTML(Synchronizer.java:44)
at Processor.sync(Processor.java:100)
at CommandLine.launch(CommandLine.java:99)
at TuneSnatch.main(TuneSnatch.java:6)
... 5 more
恢复同步数据
java.io.WriteAbortedException:写入中止;java.io.NotSerializableException:org.jsoup.nodes.Document
位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
位于java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
位于java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
位于java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
位于java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
位于java.util.ArrayList.readObject(ArrayList.java:733)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:601)
位于java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
位于java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)
位于java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
位于java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
在UserProfile.restoreData(UserProfile.java:93)
在Synchronizer.restoreData(Synchronizer.java:74)
处理器处。(Processor.java:8)
在命令行。(CommandLine.java:15)
位于tunescapt.main(tunescapt.java:5)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:601)
位于org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
原因:java.io.NotSerializableException:org.jsoup.nodes.Document
位于java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
位于java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
位于java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
位于java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
位于java.io.ObjectOutputStream.WriteObject 0(ObjectOutputStream.java:1174)
位于java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
位于java.util.ArrayList.writeObject(ArrayList.java:710)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:601)
位于java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975)
位于java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
位于java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
位于java.io.ObjectOutputStream.WriteObject 0(ObjectOutputStream.java:1174)
位于java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
在UserProfile.saveData(UserProfile.java:80)
saveData(Synchronizer.java:87)
位于Synchronizer.addHTML(Synchronizer.java:44)
at Processor.sync(Processor.java:100)
在CommandLine.launch(CommandLine.java:99)
位于tunescapt.main(tunescapt.java:6)
... 还有5个
必须序列化的不是用于序列化对象的类,而是序列化对象本身。在这种情况下,data
(类型为org.jsoup.nodes.Document
)引用的对象必须是可序列化的,因为它是序列化并存储在文件中的该对象的状态
使实用程序类可序列化是没有意义的:您从未创建它们的实例,因此也从未序列化这些不存在的实例
打个比方,当你想寄信的时候,你在信上贴上邮票,因为那就是寄出的东西。您的代码试图通过在邮递员上粘贴戳记来发送信件。必须序列化的不是用于序列化对象的类,而是序列化对象本身。在这种情况下,
data
(类型为org.jsoup.nodes.Document
)引用的对象必须是可序列化的,因为它是序列化并存储在文件中的该对象的状态
使实用程序类可序列化是没有意义的:您从未创建它们的实例,因此也从未序列化这些不存在的实例
打个比方,当你想寄信的时候,你在信上贴上邮票,因为那就是寄出的东西。您的代码试图通过在邮递员上粘贴戳记来发送信件。由于您试图保存的某些数据(org.jsoup.nodes.Document)未实现可序列化,因此引发了
NotSerializableException
确保您的数据对象实现了可序列化,错误就会消失。在这种情况下,这可能是不可能的,因为对象来自第三方库,因此您可能希望查看该对象是否可以转换为其他格式进行序列化(文档可能具有某种导出或转换方法)
你可能是abl
Restoring sync data
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.jsoup.nodes.Document
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at java.util.ArrayList.readObject(ArrayList.java:733)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
at UserProfile.restoreData(UserProfile.java:93)
at Synchronizer.restoreData(Synchronizer.java:74)
at Processor.<init>(Processor.java:8)
at CommandLine.<init>(CommandLine.java:15)
at TuneSnatch.main(TuneSnatch.java:5)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.io.NotSerializableException: org.jsoup.nodes.Document
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at java.util.ArrayList.writeObject(ArrayList.java:710)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at UserProfile.saveData(UserProfile.java:80)
at Synchronizer.saveData(Synchronizer.java:87)
at Synchronizer.addHTML(Synchronizer.java:44)
at Processor.sync(Processor.java:100)
at CommandLine.launch(CommandLine.java:99)
at TuneSnatch.main(TuneSnatch.java:6)
... 5 more
public static void saveData(Document document, File file)
{
String html = document.toString();
...
oos.writeObject(html);
...
}
oos.writeObject(obj);