Java ArrayList异常的序列化
我试图序列化ArrayListJava ArrayList异常的序列化,java,arraylist,serialization,ioexception,notserializableexception,Java,Arraylist,Serialization,Ioexception,Notserializableexception,我试图序列化ArrayList public void writeOnFile(String filePath, ArrayList<Utente> listaUtenti) { try { ObjectOutputStream writer=new ObjectOutputStream(new FileOutputStream(filePath)); writer.writeObject(listaUtenti); write
public void writeOnFile(String filePath, ArrayList<Utente> listaUtenti) {
try {
ObjectOutputStream writer=new ObjectOutputStream(new FileOutputStream(filePath));
writer.writeObject(listaUtenti);
writer.close();
System.out.println("Ha scritto");
} catch (FileNotFoundException e) {
System.out.println("File da scrivere non trovato");
} catch (IOException e) {
System.out.println("Problemi di IO nella scrittura");
e.printStackTrace();
}
}
我注意到ArrayList在很多站点上都是可序列化的,而且在ArrayList的文档中也是可以序列化的,因为它是一个原语,但我仍然会遇到以下例外情况:
java.io.NotSerializableException: net.dv8tion.jda.internal.entities.UserImpl
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at java.util.ArrayList.writeObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at stewan.Commands.writeOnFile(Commands.java:76)
at stewan.Commands.onGuildMemberJoin(Commands.java:153)
at net.dv8tion.jda.api.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:551)
at net.dv8tion.jda.api.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:96)
at net.dv8tion.jda.internal.hooks.EventManagerProxy.handle(EventManagerProxy.java:64)
at net.dv8tion.jda.internal.JDAImpl.handleEvent(JDAImpl.java:148)
at net.dv8tion.jda.internal.handle.GuildMemberAddHandler.handleInternally(GuildMemberAddHandler.java:49)
at net.dv8tion.jda.internal.handle.SocketHandler.handle(SocketHandler.java:37)
at net.dv8tion.jda.internal.requests.WebSocketClient.onDispatch(WebSocketClient.java:839)
at net.dv8tion.jda.internal.requests.WebSocketClient.onEvent(WebSocketClient.java:738)
at net.dv8tion.jda.internal.requests.WebSocketClient.handleEvent(WebSocketClient.java:717)
at net.dv8tion.jda.internal.requests.WebSocketClient.onBinaryMessage(WebSocketClient.java:877)
at com.neovisionaries.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:368)
at com.neovisionaries.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:270)
at com.neovisionaries.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:990)
at com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:749)
at com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:108)
at com.neovisionaries.ws.client.ReadingThread.runMain(ReadingThread.java:64)
at com.neovisionaries.ws.client.WebSocketThread.run(WebSocketThread.java:45)
A还试图使该类可序列化
公共类Utene实现可序列化的
以及该类中包含的类
公共类字符实现可序列化
即使没有关系
我还需要读取文件并将其分配给Uteni
,从理论上讲,它给出了相同的异常,通过找到解决写入方法的解决方案,它也应该适用于读取方法
最后一个文件的扩展名为.ser,尝试使用.bin,但相同
我还尝试写入和读取一个空的(new ArrayList()),这样它就不会出现异常,只有当ArrayList中有元素并且它不是空的时候才会出现异常。异常消息说问题在于
UserImpl
类不可序列化。要么它没有实现Serializable
,要么它扩展了一个不可序列化的基类,要么它有一个不可序列化的(非瞬态)字段。@StephenC(扩展一个不实现Serializable
的基类不是问题,只要它有一个可访问的无参数构造函数。)我知道。但是OP没有给我们上课……我发现了问题出在哪里,thx@Stephen C
java.io.NotSerializableException: net.dv8tion.jda.internal.entities.UserImpl
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at java.util.ArrayList.writeObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at stewan.Commands.writeOnFile(Commands.java:76)
at stewan.Commands.onGuildMemberJoin(Commands.java:153)
at net.dv8tion.jda.api.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:551)
at net.dv8tion.jda.api.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:96)
at net.dv8tion.jda.internal.hooks.EventManagerProxy.handle(EventManagerProxy.java:64)
at net.dv8tion.jda.internal.JDAImpl.handleEvent(JDAImpl.java:148)
at net.dv8tion.jda.internal.handle.GuildMemberAddHandler.handleInternally(GuildMemberAddHandler.java:49)
at net.dv8tion.jda.internal.handle.SocketHandler.handle(SocketHandler.java:37)
at net.dv8tion.jda.internal.requests.WebSocketClient.onDispatch(WebSocketClient.java:839)
at net.dv8tion.jda.internal.requests.WebSocketClient.onEvent(WebSocketClient.java:738)
at net.dv8tion.jda.internal.requests.WebSocketClient.handleEvent(WebSocketClient.java:717)
at net.dv8tion.jda.internal.requests.WebSocketClient.onBinaryMessage(WebSocketClient.java:877)
at com.neovisionaries.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:368)
at com.neovisionaries.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:270)
at com.neovisionaries.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:990)
at com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:749)
at com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:108)
at com.neovisionaries.ws.client.ReadingThread.runMain(ReadingThread.java:64)
at com.neovisionaries.ws.client.WebSocketThread.run(WebSocketThread.java:45)