在java中使用XMLEncoder进行序列化

在java中使用XMLEncoder进行序列化,java,xml-serialization,Java,Xml Serialization,经过一个小时的Wiki和Java中使用XMLEncoder的惯例,我仍然无法使用XMLEncoder序列化我的SystemSnapshot类。谁能告诉我出了什么问题吗?我的资源如下: package core; import gui.SceneManager; import java.io.Serializable; /** * * @author Subhra */ public class SystemSnapshot implements Serializable{ priva

经过一个小时的Wiki和Java中使用
XMLEncoder
的惯例,我仍然无法使用XMLEncoder序列化我的
SystemSnapshot
类。谁能告诉我出了什么问题吗?我的资源如下:

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

}
终端中没有错误。但是输出是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_40" class="java.beans.XMLDecoder">
<object class="core.SystemSnapshot"/>
</java>
正在产生正确的产出。鉴于 案例2:

XMLEncoder oos = new XMLEncoder(new FileOutputStream("data.base"));
SystemSnapshot ss = new   SystemSnapshot(SessionManager.getSchool(),UserStore.getUsers(),SceneManager.getColor());
oos.writeObject(ss);
oos.close();
仍在生产如上所示的输出。怎么办

会话管理器和用户商店的源代码

SessionManager.java

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

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

}
UserStore.java

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

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

}
包核;
公共类用户存储{
私有静态用户[]用户=新用户[0];
公共静态用户[]getUsers(){
返回用户;
}
公共静态void setUsers(用户[]个用户){
UserStore.users=用户;
}
公共静态void addUser(用户u){
users=new BIO().addToArray(用户,u);
}
公共静态void removeUser(用户u){
users=new BIO().removeFromArray(users,u);
}
公共静态用户getUser(字符串用户名){
for(用户u:用户){
如果(u.getUsername().equals(username)){
返回u;
}
}
返回null;
}
}

怎么了?

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

如果您可以选择的话,这只是一个提示:使用确实为XML序列化节省了很多时间。谢谢您的回答,我已经下载了它。但是它占用了将近2.5MB的空间,而我的程序不超过1MB。所以,我不想用这个。你知道其他的轻量级软件吗?嗯,下载包是2.5mb(包括源代码、文档等),但是Jar本身只有430kb。哇!添加这么多注释真的很烦人,我明白了。但现在出现了一个新问题。请参阅“编辑”。@Subhranil-如果不知道调用的方法的内容,很难知道。正如其名称所示,SessionManager类有一些方法将保存的数据库中的数据存储到内存中。它有一个名为
setSchool
的方法,该方法在SessionManager中存储学校的静态实例,而相应的get方法则相反。而
UserStore
类将用户[]从物理存储缓冲到内存。你需要看课程吗@jtahlborn@Subhranil-如果您需要代码方面的帮助,您必须显示它。对于没有人能看到的东西,你如何期望得到帮助?@Subhranil-你是否在SessionManager、UserStore和SceneManager中设置过值?