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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java设计模式简介(一):创建型模式

    Java设计模式简介(一):创建型模式

    2021年4月8日
    151
  • vue判断字符串是否含有另一个字符串_js中判断是否包含某个字符串

    vue判断字符串是否含有另一个字符串_js中判断是否包含某个字符串String对象的方法1.indexOf()indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回-1。varstr=’你好啊双11!’;console.log(str.indexOf(‘!’)!=-1)//true2.search()search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字…

    2022年9月28日
    5
  • go语言切片的三种方法_病理会诊蜡块还是切片

    go语言切片的三种方法_病理会诊蜡块还是切片Go语言入门之切片的概念

    2022年4月21日
    43
  • datagrip2021激活码【2021.10最新】

    (datagrip2021激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~6EK6WKOHUX-eyJsaWNlbnNlSWQiOi…

    2022年3月28日
    378
  • ubuntu安装qt运行环境_qt5安装教程

    ubuntu安装qt运行环境_qt5安装教程一、最近这家公司接到一个订单,客户使用到国产操作系统,意味着需要使用到Linux系统,于是乎,之前的东西又要捡起来,而且,平时代码主要是windows平台,这次需要将代码移植到linux平台,并且,由于这家公司主要买设备,因此,需要使用一些Demo测试软件,而在linux平台,目前主流的GUI程序编写主要用到QT,因此,需要安装QT.第一次尝试在linux使用QT安装过程遇到非常多问题,因此,这篇文章记录下,如何在Ubuntu下安装QT.二、安装平台:2.1Linux

    2022年10月16日
    7
  • MySQL casting from decimal to string(mysql decimal 转 varchar)

    MySQL casting from decimal to string(mysql decimal 转 varchar)今天群里一个哥们问我mysql怎么将decimal转成varchar,经过查阅资料发现,mysql好像不能将decimal直接转换成varchar,但是可以转成char,原文链接:http://stackoverflow.com/questions/5114959/mysql-casting-from-decimal-to-string类似于这样的:SELECTCAST(SUM(de

    2022年7月20日
    29

发表回复

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

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