我试图序列化一个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();
}
}
也尝试过
public void writeonFile(String filePath,ArrayList 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还试图使该类可序列化
public class Utente implements Serializable
以及该类中包含的类
public class Character implements Serializable
即使没有关系。
我还需要读取文件并将其分配给utenti
,它也提供了相同的例外,因此从理论上讲,通过找到解决写方法的解决方案,它也应适用于读方法。
最终文件的扩展名为.ser,尝试使用.bin进行同样的操作。
我还尝试写入和读取一个空的(new ArrayList()),因此只有当ArrayList中有元素并且它不为空时,它不会出现异常。