序列化对象保存到xml文件中读取xml时decoder.readObject()异常

暖光 2013-07-26 12:04:06
将序列化的对象(多个对象,一个一个的保存,不是放到数组中一次性保存)保存到xml文件中,读取时
XMLDecoder decoder = new XMLDecoder(fis);
Object use= null;
try {

while((use=decoder.readObject())!=null){
System.out.println(((User)decoder.readObject()).getUsername());
//userList.add(use);
}
}
着色那一句](use=decoder.readObject())!=null会因为读取最后一个是空的而出现异常,该怎样解决
...全文
266 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Inhibitory 2013-07-26
  • 打赏
  • 举报
回复
这是我用的例子
package com.tur.demo;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class BeanToXml {
    public static User createUser() {
        User user = new User("Biao", "Passw0rd");
        user.getValues().add("One");
        user.getValues().add("Two");
        user.getValues().add("Three");

        user.getCodes()[0] = 0;
        user.getCodes()[1] = 1;
        user.getCodes()[2] = 2;
        user.getCodes()[3] = 3;

        return user;
    }

    public static void toXml() {
        User user = createUser();

        Message message = new Message();
        message.setType("User");
        message.setContent(user);

        XStream xstream = new XStream();
        xstream.alias("Message", Message.class);
        xstream.alias("User", User.class); // 别名,输出的时候是User,而不是com.tur.demo.User

        System.out.println(xstream.toXML(message));
    }

    public static void fromXml() {
        XStream xstream = new XStream();
        xstream.alias("User", User.class);
        xstream.alias("Message", Message.class);

        Message message = (Message) xstream.fromXML(ClassLoader.getSystemResource("data.txt"));
        User user = (User) message.getContent();
        System.out.println(user);
    }

    public static void toJson() {
        User user = createUser();
        XStream xstream = new XStream(new JettisonMappedXmlDriver());
        xstream.setMode(XStream.NO_REFERENCES);
        xstream.alias("User", User.class);

        System.out.println(xstream.toXML(user));
    }

    public static void fromJson() {

    }

    public static void main(String[] args) {
        toXml();
        fromXml();

        toJson();
    }
}

class Message {
    private String type;
    private Object content;

    String getType() {
        return type;
    }

    void setType(String type) {
        this.type = type;
    }

    Object getContent() {
        return content;
    }

    void setContent(Object content) {
        this.content = content;
    }
}

class User {
    private String username;
    private String password;
    private List<String> values;
    private int[] codes;

    public User() {
        this("", "");
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
        this.values = new ArrayList<String>();
        this.codes = new int[5];
    }

    String getUsername() {
        return username;
    }

    void setUsername(String username) {
        this.username = username;
    }

    String getPassword() {
        return password;
    }

    void setPassword(String password) {
        this.password = password;
    }

    List<String> getValues() {
        return values;
    }

    void setValues(List<String> values) {
        this.values = values;
    }

    int[] getCodes() {
        return codes;
    }

    void setCodes(int[] codes) {
        this.codes = codes;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", values=" + values +
                ", codes=" + Arrays.toString(codes) +
                '}';
    }
}
Inhibitory 2013-07-26
  • 打赏
  • 举报
回复
XMLDecoder没用过,一直使用的是xstream,没有遇到过错误,不防考虑试试用这个。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧