JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
2013-12-31 06:32
260 查看
什么是序列化
java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个相同的对象。序列化机制在java中有着广泛的应用,EJB、RMI等技术都是以此为基础的。
正确使用序列化机制
一般而言,要使得一个类可以序列化,只需简单实现java.io.Serializable接口即可(还要实现无参数的构造方法)。该接口是一个标记式接口,它本身不包含任何内容,实现了该接口则表示这个类准备支持序列化的功能。如下例定义了类Person,并声明其可以序列化。
上面两段来源:http://lionheart.iteye.com/blog/139540
下面为三种格式转换的代码:
1.默认格式.
输出结果: sr test.serializable.Person I ageL namet Ljava/lang/String;xp t Jay
2.XML格式
输出结果:
3.JSON格式
输出结果:
{"Person":{"name":"geniushehe","age":16}}
java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个相同的对象。序列化机制在java中有着广泛的应用,EJB、RMI等技术都是以此为基础的。
正确使用序列化机制
一般而言,要使得一个类可以序列化,只需简单实现java.io.Serializable接口即可(还要实现无参数的构造方法)。该接口是一个标记式接口,它本身不包含任何内容,实现了该接口则表示这个类准备支持序列化的功能。如下例定义了类Person,并声明其可以序列化。
上面两段来源:http://lionheart.iteye.com/blog/139540
public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name;; private int age; public Person(){ } public Person(String str,int n){ System.out.println("Inside Person's Constructor"); name = str; age = n; } public String getName() { return name; } public int getAge() { return age; } }
下面为三种格式转换的代码:
1.默认格式.
public class SerializeToFlatFile { public static void main(String[] args) { SerializeToFlatFile ser = new SerializeToFlatFile(); ser.savePerson(); ser.restorePerson(); } public void savePerson(){ Person myPerson = new Person("Jay", 24); try{ FileOutputStream fos = new FileOutputStream("E:\\person.txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); System.out.println("Person--Jay,24---Written"); oos.writeObject(myPerson); oos.flush(); oos.close(); }catch(Exception e){ e.printStackTrace(); } } @SuppressWarnings("resource") public void restorePerson(){ try{ FileInputStream fls = new FileInputStream("E:\\person.txt"); ObjectInputStream ois = new ObjectInputStream(fls); Person myPerson = (Person)ois.readObject(); System.out.println("\n---------------------\n"); System.out.println("Person --read:"); System.out.println("Name is:"+myPerson.getName()); System.out.println("Age is :"+myPerson.getAge()); }catch(Exception e){ e.printStackTrace(); } } }
输出结果: sr test.serializable.Person I ageL namet Ljava/lang/String;xp t Jay
2.XML格式
public class SerializeXML { public static void main(String[] args) { SerializeXML ser = new SerializeXML(); ser.serializeToXml(); ser.deSerializeFromXml(); } public void serializeToXml(){ Person[] myPersons = new Person[2]; myPersons[0] = new Person("Jay", 24); myPersons[1] = new Person("Tom", 23); XStream xStream = new XStream(); xStream.alias("Person", Person.class); try{ FileOutputStream foStream = new FileOutputStream("E:\\persons.xml"); xStream.toXML(myPersons,foStream); }catch(Exception e){ e.printStackTrace(); } } public void deSerializeFromXml(){ XStream xStream = new XStream(); xStream.alias("Person", Person.class); Person[] myPersons = null; try{ FileInputStream flStream = new FileInputStream("E:\\persons.xml"); myPersons = (Person[])xStream.fromXML(flStream); if(myPersons!=null){ for(Person person:myPersons){ System.out.println(person.getName()); System.out.println(person.getAge()); } } }catch(Exception e){ e.printStackTrace(); } } }
输出结果:
<Person-array> <Person> <name>Jay</name> <age>24</age> </Person> <Person> <name>Tom</name> <age>23</age> </Person> </Person-array>
3.JSON格式
public class SerializeJSON { public static void main(String[] args) { SerializeJSON serializeJSON = new SerializeJSON(); serializeJSON.writeJSON(); serializeJSON.readJSON(); } public void writeJSON(){ XStream xStream = new XStream(new JettisonMappedXmlDriver()); Person person = new Person("geniushehe", 16); try { FileOutputStream fos = new FileOutputStream("E:\\json.js"); xStream.setMode(XStream.NO_REFERENCES); xStream.alias("Person", Person.class); xStream.toXML(person, fos); } catch (FileNotFoundException e) { e.printStackTrace(); } } public void readJSON(){ XStream xStream = new XStream(new JettisonMappedXmlDriver()); Person person = null; try { FileInputStream fis = new FileInputStream("E:\\json.js"); xStream.setMode(XStream.NO_REFERENCES); xStream.alias("Person", Person.class); person = (Person)xStream.fromXML(fis); System.out.println(person.getName()); System.out.println(person.getAge()); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
输出结果:
{"Person":{"name":"geniushehe","age":16}}
相关文章推荐
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- JAVA序列化与反序列化三种格式存取(默认格式、XML格式、JSON格式)
- java对象序列化与反序列化的默认格式和json格式使用示例
- Java对象的序列化与反序列化:默认格式及JSON格式(使用jackson)
- 将Java对象序列化成JSON和XML格式的实例
- java中对象和json格式相互序列化和反序列化的函数
- JSON对象反序列化为Java对象的时候自定义Date类型的字符串格式
- Java的微信开发中使用XML格式和JSON格式数据的示例
- JAVA序列化标准格式(XML、JSON)
- java如何利用FastJSON、Gson、Jackson三种Json格式工具自定义时间序列化
- JAVA后台没有报错,本应该返回json格式的,但是返回的确实xml格式,还报错
- 调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据(转)
- fastjson将java转换成json数据;指定日期格式,取消循环引用
- 读取网址中json数据 转换为java格式
- json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化[转]
- js 解析java后端的String为json格式并格式化Json格式的时间
- Java解析Json格式数据的小总结
- Json.net动态序列化以及对时间格式的处理
- 4000 fastJson java后台转换json格式数据
- JSON 序列化和反序列化:将时间由"//Date(10000000000-0700)//" 格式转换成 "yyyy-MM-dd HH:mm:ss" 格式的字符串