首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >序列化-不工作

序列化-不工作
EN

Stack Overflow用户
提问于 2015-06-11 12:20:20
回答 2查看 1.6K关注 0票数 3

我用像How to serialize an object into a string这样的方法创建类,每个方法都说错误"java.lang.ClassCastException: java.lang.String不能转换到Myclass“

我的代码: 1)

代码语言:javascript
运行
复制
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) -召唤

代码语言:javascript
运行
复制
MyClass hl = (MyClass) Serialization.fromString(items
        .getString("data"));
hl.load(); // this is my method from class

3) MyClass -全息图

代码语言:javascript
运行
复制
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
}

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-11 12:48:54

根据链接的答案,问题很可能在于您没有向我们展示的代码。当您序列化您的MyClass对象时,您可能正在执行如下操作:

代码语言:javascript
运行
复制
MyClass hl;
String base64String = Serialization.toString(hl.toString());

但是,您应该这样称呼它:

代码语言:javascript
运行
复制
MyClass hl;
String base64String = Serialization.toString(hl);

如果将一个String传递给序列化函数,则在调用Serialization.fromString()时将得到一个Serialization.fromString()。您希望获得一个可以转换为MyClass实例的对象,所以将其中一个对象传递到Serialization.toString()中。

票数 1
EN

Stack Overflow用户

发布于 2015-06-11 12:41:27

Serilization中的fromString()方法返回一个对象,您无法将该对象转换为类MyClass。下面的行将导致classCastException

代码语言:javascript
运行
复制
MyClass hl = (MyClass) Serialization.fromString(items
    .getString("data"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30780629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档