Serialization - not working

I am creating a class with methods like How to serialize an object to a string and each one says the error "java.lang.ClassCastException: java.lang.String cannot be cast in Myclass"

My codes are: 1)

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import javax.xml.bind.DatatypeConverter;

public class Serialization {

    public static Object fromString(String s) throws IOException,
            ClassNotFoundException {
        byte[] data = DatatypeConverter.parseBase64Binary(s);
        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(
                data));
        Object o = ois.readObject();
        ois.close();
        return o;
    }

    public static String toString(Serializable o) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(o);
        oos.close();
        return DatatypeConverter.printBase64Binary(baos.toByteArray());
    }
}

      

2) - call

MyClass hl = (MyClass) Serialization.fromString(items
        .getString("data"));
hl.load(); // this is my method from class

      

3) MyClass - hologram

public class Hologram implements Serializable {

 /**
 * 
 */
private static final long serialVersionUID = 1L;

private Location loc;
private String name;
private String displayname;
public ArmorStand stand;

public Hologram(String name, String displayname, Location loc) {
this.loc = loc;
this.name = name;
this.displayname = displayname;

ArmorStand as = (ArmorStand) loc.getWorld().spawnEntity(loc,
    EntityType.ARMOR_STAND);

as.setGravity(false);
as.setCanPickupItems(false);
as.setCustomName(displayname);
as.setCustomNameVisible(true);
as.setVisible(false);

this.stand = as;

HologramManager.holograms.put(name, this);

}

public void move(Location loc) {
this.loc = loc;

stand.teleport(loc);
}

public Location getLocation() {
return this.loc;
}

public void remove() {
stand.remove();
HologramManager.holograms.remove(name);
}

public void removeHologram() {
HologramManager.remove(name);
}

public void changeName(String name) {
HologramManager.holograms.remove(this.name);
this.name = name;
HologramManager.holograms.put(name, this);
}

public void changeDisplayName(String displayName) {
this.displayname = displayName;
stand.setCustomName(displayname);
stand.setCustomNameVisible(true);
}

public void load() {
//todo
}

}

      

+3


source to share


2 answers


Based on the linked answer, the problem is most likely with the code you are not showing us. When you serialize your MyClass object you are probably doing something like this:

MyClass hl;
String base64String = Serialization.toString(hl.toString());

      

However, you must call it like this:



MyClass hl;
String base64String = Serialization.toString(hl);

      

If you pass String

to serialization functions, you get String

back when you call Serialization.fromString()

. You want to return an object back which you can apply to an instance MyClass

, so pass one of these to Serialization.toString()

.

+1


source


The fromString () method in Serialization returns an object that you could not apply to the MyClass class. The following line throws a classCastException



MyClass hl = (MyClass) Serialization.fromString(items
    .getString("data"));

      

0


source







All Articles