Java ArrayList异常的序列化

Java 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

我试图序列化ArrayList

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)