跟我快速学习XStream(四)

作者:黄少存,叩丁狼高级讲师。原创文章,转载请注明出处。

上一节咱们遗留下一个问题,就是当我们需要保存多个对象到 xml 中时怎么处理?当然我们也可以在对象中存入集合,但是毕竟不是多个对象,而是对象中存多个元素.那使用 XStream如何处理呢?请看 XStream 对象流API

API

XStream 在针对存储多个对象的操作提供了java.io.ObjectInputStream,java.io.ObjectOutputStream对象流的转化操作.

xStream对象.createObjectOutputStream(new FileOutputStream(file));
xStream对象.createObjectInputStream(new FileInputStream(file));

看到 API 后相信很多人已经知道了怎么去书写了.接下来上代码.

实践出真知

模型

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@XStreamAlias("student") // 设置生成标签名
public class Student {
    private String name;
    private Integer age;
}

接下来就把多个对象存到 xml 中

@Test
public void testObj2xml() throws Exception {
    XStream xStream = new XStream(new StaxDriver());
    // 自动解析注解
    xStream.autodetectAnnotations(true);
    // 获取对象输出流
    ObjectOutputStream objOs = xStream.createObjectOutputStream(new FileOutputStream(new File("obj.xml")));
    // 写入对象
    objOs.writeObject(new Student("stef",17));
    objOs.writeObject(new Student("will",17));
    objOs.writeObject(new Student("willie",18));
    objOs.close();
}

接下来看下生成的xml

<?xml version="1.0" ?>
<object-stream>
    <student>
        <name>stef</name>
        <age>18</age>
    </student>
    <student>
        <name>will</name>
        <age>18</age>
    </student>
    <student>
        <name>willie</name>
        <age>18</age>
    </student>
</object-stream>

以上咱们就把多个对象存到了 xml 中,接下来就是从 xml 中去读取对象了

@Test
public void testXml2obj() throws Exception {
    XStream xStream = new XStream(new StaxDriver());
    // 解析注解
    xStream.processAnnotations(Student.class);
    // 获取对象输入流
    ObjectInputStream objIs = xStream.createObjectInputStream(new FileInputStream(new File("obj.xml")));
    // 写入对象
    System.out.println((Student)objIs.readObject());
    System.out.println((Student)objIs.readObject());
    System.out.println((Student)objIs.readObject());
    objIs.close();
}

控制台

Student(name=stef, age=18)
Student(name=will, age=18)
Student(name=willie, age=18)

以上咱们就把 xml 中的对象给读取出来了,看到这个,其实用心的你会发现,目前咱们存入了3个对象,读取也只能读3遍,如果读第4个就会出错,如果想做到通用,也就是读归读,写归写,不被存入对象的个数限制,那这个怎么处理呢?请看怎么判断对象流已经读取到末尾.

读到这里,有想法的你可能会有这样的疑问,目前咱们都是用 XStrem 默认的解析方式来处理对象和 xml 的装换,如果咱们有比较特殊的需求咋办?能否由咱们自己来定制解析规则?答案是肯定的,请看下一节,XStream 自定义转换器.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值