XStream工具简单教程

XStream工具简单教程XStream 简单教程 阅读目录 XStream 介绍 XStream 的基本使用 XStrea 序列化重命名 XStream 注解的使用 XStream 自定义转换器 XStream 对象流的使用 XStream 对象流的使用 XStream 持久化 APIXStream 操作 JSONXStream 介绍 1 Xstream 是一种 OXMapping 技术 是用来处理 XML 文件序列化的框架 在将 JavaBea

XStream简单教程:

阅读目录

  • XStream介绍
  • XStream的基本使用
  • XStrea序列化重命名
  • XStream注解的使用
  • XStream自定义转换器
  • XStream对象流的使用
  • XStream对象流的使用
  • XStream持久化API
  • XStream操作JSON

XStream介绍

 class Person//JavaBean实体类 { private String name; private int age; public Person(String name,int age) { this.name=name; this.age=age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } public class Test { public static void main(String[] args) { Person bean=new Person("张三",19); XStream xstream = new XStream(); //XML序列化 String xml = xstream.toXML(bean); System.out.println(xml); //XML反序列化 bean=(Person)xstream.fromXML(xml); System.out.println(bean); xstream = new XStream(new JettisonMappedXmlDriver()); xstream.setMode(XStream.NO_REFERENCES); //Json序列化 String json=xstream.toXML(bean); System.out.println(json); //Json反序列 bean=(Person)xstream.fromXML(json); System.out.println(bean); } } 

程序运行结果:

<test.Person> <name>张三</name> <age>19</age> </test.Person> Person [name=张三, age=19] {"test.Person":{"name":"张三","age":19}} Person [name=张三, age=19] 

XStream的基本使用

public class Test { public static void main(String[] args) { Person bean=new Person("张三",19); //XStream xstream = new XStream();//需要XPP3库 //XStream xstream = new XStream(new DomDriver());//不需要XPP3库 XStream xstream = new XStream(new StaxDriver());//不需要XPP3库开始使用Java6 xstream.alias("人",Person.class);//为类名节点重命名 //XML序列化 String xml = xstream.toXML(bean); System.out.println(xml); //XML反序列化 bean=(Person)xstream.fromXML(xml); System.out.println(bean); } } 

程序运行结果:

<?xml version="1.0" ?><人><name>张三</name><age>19</age></人> Person [name=张三, age=19] 
public class Test { public static void main(String[] args) { Person bean=new Person("张三",19); XStream xstream = new XStream(new JettisonMappedXmlDriver());//设置Json解析器 xstream.setMode(XStream.NO_REFERENCES);//设置reference模型,不引用 xstream.alias("人",Person.class);//为类名节点重命名 //Json序列化 String xml = xstream.toXML(bean); System.out.println(xml); //Json反序列化 bean=(Person)xstream.fromXML(xml); System.out.println(bean); } } 

程序运行结果:

{"人":{"name":"张三","age":19}} Person [name=张三, age=19] 

XStream序列化重命名

(1)为包重命名:XStream.aliasPackage()方法

public class Test { public static void main(String[] args) { Person bean=new Person("张三",19); XStream xstream = new XStream(); xstream.aliasPackage("com.lzw", "test");//为包名称重命名 //序列化 String xml = xstream.toXML(bean); System.out.println(xml); //反序列化 bean=(Person)xstream.fromXML(xml); System.out.println(bean); } } 

程序运行结果:

 <com.lzw.Person> <name>张三</name> <age>19</age> </com.lzw.Person> Person [name=张三, age=19] 

(2)为类重命名:XStream.alias()方法

 public class Test { public static void main(String[] args) { Person bean=new Person("张三",19); XStream xstream = new XStream(); xstream.alias("人", Person.class);//为类名节点重命名 //序列化 String xml = xstream.toXML(bean); System.out.println(xml); //反序列化 bean=(Person)xstream.fromXML(xml); System.out.println(bean); } } 

程序运行结果:

<人> <name>张三</name> <age>19</age> </人> Person [name=张三, age=19] 

(3)为字段重命名:XStream.aliasField()方法

public class Test { public static void main(String[] args) { Person bean=new Person("张三",19); XStream xstream = new XStream(); xstream.aliasField("姓名", Person.class,"name");//为类的字段节点重命名 xstream.aliasField("年龄", Person.class,"age");//为类的字段节点重命名 //序列化 String xml = xstream.toXML(bean); System.out.println(xml); //反序列化 bean=(Person)xstream.fromXML(xml); System.out.println(bean); } } 

程序运行结果:

 <test.Person> <姓名>张三</姓名> <年龄>19</年龄> </test.Person> Person [name=张三, age=19] 

(4)省略集合根节点:XStream.addImplicitCollection()方法

class Person { private String name; private int age; private List friends; public Person(String name, int age, String... friends) { this.name = name; this.age = age; this.friends = Arrays.asList(friends); } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", friends=" + friends + "]"; } } public class Test { public static void main(String[] args) { Person bean =new Person("张三",19,"李四","王五","赵六"); XStream xstream = new XStream(); xstream.addImplicitCollection(Person.class, "friends");//省略集合根节点 //序列化 String xml = xstream.toXML(bean); System.out.println(xml); //反序列化 bean=(Person)xstream.fromXML(xml); System.out.println(bean); } } 

程序运行结果:

<test.Person> <name>张三</name> <age>19</age> <string>李四</string> <string>王五</string> <string>赵六</string> </test.Person> Person [name=张三, age=19, friends=[李四, 王五, 赵六]] 

(5)把字段节点设置成属性:Xstream.useAttributeFor()方法

public class Test { public static void main(String[] args) { Person bean =new Person("张三",19,"李四","王五","赵六"); XStream xstream = new XStream(); xstream.useAttributeFor(Person.class, "name");//把字段节点设置成属性 //序列化 String xml = xstream.toXML(bean); System.out.println(xml); //反序列化 bean=(Person)xstream.fromXML(xml); System.out.println(bean); } } 

程序运行结果:

 <test.Person name="张三"> <age>19</age> <friends class="java.util.Arrays$ArrayList"> <a class="string-array"> <string>李四</string> <string>王五</string> <string>赵六</string> </a> </friends> </test.Person> Person [name=张三, age=19, friends=[李四, 王五, 赵六]] 

(6)隐藏字段:xstream.omitField()方法

public class Test { public static void main(String[] args) { Person bean =new Person("张三",19,"李四","王五","赵六"); XStream xstream = new XStream(); xstream.omitField(Person.class, "friends");//把字段节点隐藏 //序列化 String xml = xstream.toXML(bean); System.out.println(xml); //反序列化 bean=(Person)xstream.fromXML(xml); System.out.println(bean); } } 

程序运行结果:

<test.Person> <name>张三</name> <age>19</age> </test.Person> Person [name=张三, age=19, friends=null] 

XStream注解的使用

 XStream xstream = new XStream(); xstream.processAnnotations(Person.class);//应用Person类的注解 xstream.autodetectAnnotations(true);//自动检测注解 (2)重命名注解:@XStreamAlias() @XStreamAlias("人") class Person { @XStreamAlias("姓名") private String name; @XStreamAlias("年龄") private int age; @XStreamAlias("朋友") private List friends; public Person(String name, int age, String... friends) { this.name = name; this.age = age; this.friends = Arrays.asList(friends); } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", friends=" + friends + "]"; } } 

程序运行结果:

<人> <姓名>张三</姓名> <年龄>19</年龄> <朋友 class="java.util.Arrays$ArrayList"> <a class="string-array"> <string>李四</string> <string>王五</string> <string>赵六</string> </a> </朋友> </人> Person [name=张三, age=19, friends=[李四, 王五, 赵六]] 

(3)省略集合根节点:@XStreamImplicit

class Person { private String name; private int age; //@XStreamImplicit//只隐藏集合根节点 @XStreamImplicit(itemFieldName="朋友")//设置重复的节点名,可能会导致无法反序列化 private List<String> friends; public Person(String name, int age, String... friends) { this.name = name; this.age = age; this.friends = Arrays.asList(friends); } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", friends=" + friends + "]"; } } 

程序运行结果:

<test.Person> <name>张三</name> <age>19</age> <朋友>李四</朋友> <朋友>王五</朋友> <朋友>赵六</朋友> </test.Person> Person [name=张三, age=19, friends=[李四, 王五, 赵六]] 

(4)把字段节点设置成属性:@XStreamAsAttribute

class Person { @XStreamAsAttribute private String name; @XStreamAsAttribute private int age; private List<String> friends; public Person(String name, int age, String... friends) { this.name = name; this.age = age; this.friends = Arrays.asList(friends); } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", friends=" + friends + "]"; } } 

程序运行结果:

<test.Person name="张三" age="19"> <friends class="java.util.Arrays$ArrayList"> <a class="string-array"> <string>李四</string> <string>王五</string> <string>赵六</string> </a> </friends> </test.Person> Person [name=张三, age=19, friends=[李四, 王五, 赵六]] 

(5)隐藏字段:@XStreamOmitField

 class Person { private String name; private int age; @XStreamOmitField private List<String> friends; public Person(String name, int age, String... friends) { this.name = name; this.age = age; this.friends = Arrays.asList(friends); } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", friends=" + friends + "]"; } } 

程序运行结果:

<test.Person> <name>张三</name> <age>19</age> </test.Person> Person [name=张三, age=19, friends=null] 

(6)设置转换器:@XStreamConverter()

class Person { private String name; private int age; @XStreamConverter(value=BooleanConverter.class,booleans={false},strings={"男","女"}) private boolean sex; public Person(String name, int age, boolean sex) { this.name = name; this.age = age; this.sex=sex; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]"; } } 

程序运行结果:

<test.Person> <name>张三</name> <age>19</age> <sex>男</sex> </test.Person> Person [name=张三, age=19, sex=true] 

XStream自定义的转换器

class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } public class PersonConverter implements Converter { @Override//定义转换器能转换的JavaBean类型 public boolean canConvert(Class type) { return type.equals(Person.class); } @Override//把对象序列化成XML或Json public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { Person person = (Person) value; writer.startNode("姓名"); writer.setValue(person.getName()); writer.endNode(); writer.startNode("年龄"); writer.setValue(person.getAge()+""); writer.endNode(); writer.startNode("转换器"); writer.setValue("自定义的转换器"); writer.endNode(); } @Override//把XML或Json反序列化成对象 public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { Person person = new Person("",-1); reader.moveDown(); person.setName(reader.getValue()); reader.moveUp(); reader.moveDown(); person.setAge(Integer.parseInt(reader.getValue())); reader.moveUp(); return person; } } public class Test { public static void main(String[] args) { Person bean =new Person("张三",19); XStream xstream = new XStream(); xstream.registerConverter(new PersonConverter());//注册转换器 //序列化 String xml = xstream.toXML(bean); System.out.println(xml); //反序列化 bean=(Person)xstream.fromXML(xml); System.out.println(bean); } } 

程序运行结果:

<test.Person> <姓名>张三</姓名> <年龄>19</年龄> <转换器>自定义的转换器</转换器> </test.Person> Person [name=张三, age=19] 
 class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } } public class Test { public static void main(String[] args) throws IOException { XStream xstream = new XStream(); ObjectOutputStream out = xstream.createObjectOutputStream(System.out); out.writeObject(new Person("张三",12)); out.writeObject(new Person("李四",19)); out.writeObject("Hello"); out.writeInt(12345); out.close(); } } 

程序运行结果:

 <object-stream> <test.Person> <name>张三</name> <age>12</age> </test.Person> <test.Person> <name>李四</name> <age>19</age> </test.Person> <string>Hello</string> <int>12345</int> </object-stream> 
class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } public class Test { public static void main(String[] args) throws IOException, ClassNotFoundException { String s="<object-stream><test.Person><name>张三</name><age>12</age></test.Person><int>12345</int></object-stream>"; StringReader reader = new StringReader(s); XStream xstream = new XStream(); ObjectInputStream in = xstream.createObjectInputStream(reader); System.out.println((Person) in.readObject()); System.out.println(in.readInt()); } } 

程序运行结果:

Person [name=张三, age=12] 12345 

XStream持久化API

(1)保存JavaBean对象

class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } public class Test { public static void main(String[] args) throws IOException, ClassNotFoundException { PersistenceStrategy strategy = new FilePersistenceStrategy(new File("D:\\tmp")); List list = new XmlArrayList(strategy); list.add(new Person("张三",13));//保存数据 list.add(new Person("李四",21)); list.add(new Person("王五",17)); } } 程序运行结果:如果我们检查D:\tmp目录,有三个文件:、、;每个对象都被序列化到XML文件里。 

(2)读取并删除JavaBean对象

 public class Test { public static void main(String[] args) throws IOException, ClassNotFoundException { PersistenceStrategy strategy = new FilePersistenceStrategy(new File("D:\\tmp")); List list = new XmlArrayList(strategy); for (Iterator it = list.iterator(); it.hasNext();) { System.out.println((Person) it.next()); it.remove();//删除对象序列化文件 } } } 

程序运行结果:

Person [name=张三, age=13] Person [name=李四, age=21] Person [name=王五, age=17] 
class Person { @XStreamAlias("姓名") private String name; @XStreamAlias("年龄") private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } public class Test { public static void main(String[] args) { Person bean=new Person("张三",19); XStream xstream = new XStream(new JettisonMappedXmlDriver());//设置Json解析器 xstream.autodetectAnnotations(true); //Json序列化 String xml = xstream.toXML(bean); System.out.println(xml); //Json反序列化 bean=(Person)xstream.fromXML(xml); System.out.println(bean); } } 

程序运行结果:

{"人":{"姓名":"张三","年龄":19}} Person [name=张三, age=19] 
class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } public class Test00 { public static void main(String[] args) { Person bean=new Person("张三",19); XStream xstream = new XStream(new JsonHierarchicalStreamDriver() { public HierarchicalStreamWriter createWriter(Writer writer) { return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE); } }); //Json序列化 String xml = xstream.toXML(bean); System.out.println(xml); } } 

程序运行结果:

{ "name": "张三", "age": 19 } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233412.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月22日 下午4:01
下一篇 2025年7月22日 下午4:22


相关推荐

  • Android开发:什么是IBinder

    Android开发:什么是IBinder上回书简单描述了进程间传递类对象的原理,这回在讲Parcel之前,先要讲一个东西:IBinder。IBinder是什么呢?首先要明白,Android的远程调用(就是跨进程调用)就是通过IBinder实现的,下面是对android开发文档的翻译。IBinder是远程对象的基本接口,是为高性能而设计的轻量级远程调用机制的核心部分。但它不仅用于

    2022年4月9日
    50
  • 动手实操丨RC522射频卡模块与IC卡完成充值消费查询的技术实现思路

    动手实操丨RC522射频卡模块与IC卡完成充值消费查询的技术实现思路一文手把手教你利用RC522射频卡模块与IC卡完成充值消费查询的技术实现思路。

    2022年7月26日
    8
  • 【Android TV 开发】–>Leanback 中的 HorizontalGridView

    【Android TV 开发】–>Leanback 中的 HorizontalGridViewLeanBack 是 Google 官方推出的 TV 端的功能库 里面包含了很多在 TVAndroid 端开发常用的控件 本文重点介绍其对 RecyclerView 适配 TV 端做的封装 HorizontalGr

    2026年3月18日
    1
  • java和html_如何区别html和html5

    java和html_如何区别html和html5JSP和HTMLJSP代表JavaServerPages;它主要用于开发动态网页,文件的扩展名为.jsp。JSP的主要优点是程序员可以在HTML中插入Java代码;使用JSP标签插入Java代码。程序员可以编写<%标签来启动Java代码,并在Java代码的末尾写入%>标签。JSP允许在HTML文件中插入Java代码HTML代表超文本标记语言。它是众所周知的用于开发网页的标记语言,有助于构建网页结构。JSP和HTML之间的区别1、采用的技术不同HTML是客户端技术,提供

    2025年8月13日
    4
  • Dubbo架构(应用架构)

    一、整体框架1、Dubbo介绍ApacheDubbo是一款高性能、轻量级的开源JavaRPC框架。它有三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。1、Dubbo特点1、面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。2、智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状…

    2022年4月11日
    100
  • Android AutoSize 失效处理

    Android AutoSize 失效处理重写当前getResources方法//***************************↓↓↓处理autosize失效↓↓↓********************************//overridefungetResources():Resources{returnsuper.getResources()}//***************************↑↑↑处理autosize失效↑↑↑********************************.

    2022年5月28日
    160

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号