Serialization of ArrayList exception

207 Views Asked by At

I tried to serialize an 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();
    }
}

also tried

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();
    }
}

I red that ArrayList is serializable on a lot of sites and also on the documentation of ArrayList as it is a primitive but i still get this exception:

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 tried also to make that class serializable public class Utente implements Serializable

and also the class contained in that class public class Character implements Serializable

even if there should be no relation.

I also need to read the file and and allocate it to utenti, it gives the same exception so theoretically by finding a solution to solve the write method it should also work for read method.

The final file has extension .ser, tried with .bin but same thing.

I also tried to write and read an empty ( new ArrayList() ) and like so it gives no exception, only when there are elements in the ArrayList and it is not empty.

0

There are 0 best solutions below