首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中使用XMLEncoder序列化

在java中使用XMLEncoder序列化
EN

Stack Overflow用户
提问于 2015-07-11 15:28:30
回答 1查看 725关注 0票数 0

经过一个小时的wikis和在Java中使用XMLEncoder的惯例之后,我仍然无法在使用XMLEncoder序列化SystemSnapshot类方面取得任何进展。有人能告诉我出了什么问题吗?我的资源如下:

代码语言:javascript
复制
package core;

import gui.SceneManager;
import java.io.Serializable;

/**
 *
 * @author Subhra
*/

public class SystemSnapshot implements Serializable{

private static final long serialVersionUID = -6637378268413872760L;

private final School school;

private final User[] users;

private final String colorName;

public SystemSnapshot(){
    school = SessionManager.getSchool();
    users = UserStore.getUsers();
    colorName = SceneManager.getColor();
}

public SystemSnapshot(School school, User[] users, String c) {
    this.school = school;
    this.users = users;
    this.colorName = c;
}

public School getSchool() {
    return school;
}

public User[] getUsers() {
    return users;
}

public String getColorName() {
    return colorName;
}

}

终端没有错误。但是输出如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_40" class="java.beans.XMLDecoder">
<object class="core.SystemSnapshot"/>
</java>

有没有人?

在jtahlborn的回答之后,我计算出并添加了所有的getter和setter。现在我得到两种类型的输出。案例1:

代码语言:javascript
复制
XMLEncoder xml = new XMLEncoder(new FileOutputStream("try.xml"));
School ss = new School("S");
ss.addSubject(new Subject("BEnals"));
ss.addTeacher(new Teacher("Nil","T0",21,5000,new Subject("S")));
ss.addClass(new Standard(1,1));
ss.addStudent("STU0");
User u = new User(UserType.ADMIN,"Subhra","subhra","itsveryconfidential");
SystemSnapshot ss2 = new SystemSnapshot(ss,new User[]{u},"A string");
xml.writeObject(ss2);
xml.close();

正在产生正确的输出。鉴于案例2:

代码语言:javascript
复制
XMLEncoder oos = new XMLEncoder(new FileOutputStream("data.base"));
SystemSnapshot ss = new   SystemSnapshot(SessionManager.getSchool(),UserStore.getUsers(),SceneManager.getColor());
oos.writeObject(ss);
oos.close();

仍在产生上述输出。该怎么办呢?

SessionManager UserStore源代码

SessionManager.java

代码语言:javascript
复制
package core;

import core.User.UserType;
public class SessionManager {

private static User currentuser;

private static School school;

public static void setSchool(School schol) {
     school = schol;
}

public static School getSchool() {
    return school;
}

public static User getCurrentuser() {
    return currentuser;
}

public static void setCurrentuser(User currentuser) {
    SessionManager.currentuser = currentuser;
}

public static UserType getCurrentUserType(){
    return currentuser.getType();
}

}

UserStore.java

代码语言:javascript
复制
package core;

public class UserStore {

private static User[] users = new User[0];

public static User[] getUsers() {
    return users;
}

public static void setUsers(User[] users) {
    UserStore.users = users;
}

public static void addUser(User u) {
    users = new BIO<User>().addToArray(users,u);
}

public static void removeUser(User u) {
    users = new BIO<User>().removeFromArray(users,u);
}

public static User getUser(String username){
    for(User u : users){
        if(u.getUsername().equals(username)){
            return u;
        }
    }
    return null;
}

}

怎么了?

EN

回答 1

Stack Overflow用户

发布于 2015-07-11 16:08:09

我猜您的SystemSnapshot不是一个有效的java,因为它没有属性的setter。XMLEncoder不像普通序列化那样神奇,它需要有效的java (getter和setter用于所有属性)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31358733

复制
相关文章

相似问题

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