Java序列化与反序列化三种格式存取

上一篇 / 下一篇  2012-08-15 10:17:15 / 个人分类:Java

U6B"Ie/a(ge0VHm0  什么是序列化

slg NMy0

s0K1X&d2ex0  Java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个相同的对象。序列化机制在Java中有着广泛的应用,EJB、RMI等技术都是以此为基础的。

"X mdfM[6o051Testing软件测试网B#ql ap5YD1I8AW:o

  正确使用序列化机制51Testing软件测试网CPcU!u(B&[M

Z-wF*s:[bj)W}0   一般而言,要使得一个类可以序列化,只需简单实现java.io.Serializable接口即可(还要实现无参数的构造方法)。该接口是一个标记式 接口,它本身不包含任何内容,实现了该接口则表示这个类准备支持序列化的功能。如下例定义了类Person,并声明其可以序列化。51Testing软件测试网(`?y0Lj^X2t4~ d/s&m

51Testing软件测试网 HVE'g#[i9UI9S

public class Person implements Serializable {

^9ua p?2a0

@9V qFW0`*p(h5W:E0 private static final long serialVersionUID = 1L;
U CgL.K0 51Testing软件测试网8v _2M,cjtA
 private String name;;
!W0v'g`|-y0 private int age;51Testing软件测试网jhj z0K~m
 public Person(){
ql ys I,n}0  
1H{!qWl0 }
?)wX*w(ogY/H0 public Person(String str,int n){
hX#FGc6U(P#?V0  System.out.println("Inside Person's Constructor");
j%@1@ [_ aW0  name = str;
6xu"t(y'U0  age = n;
2F P9\rP#@0 }
/f n%{'q@RF0 public String getName() {
*f'act*b;w0  return name;
3^t^2J/[qf%|hd0 }
'[{#B~j ~u0 public int getAge() {
VEakJm p}0  return age;
4@$[ Le0?0 }51Testing软件测试网B h&v)U.}q)hr
}
51Testing软件测试网3e6Z0M F?tu

XW'do'e:{X|7z:m0  下面为三种格式转换的代码:51Testing软件测试网 L ~|L \q$f

51Testing软件测试网:St8TSA%{5S N

  1、默认格式51Testing软件测试网.c5}ieb0n4\

public class SerializeToFlatFile {51Testing软件测试网` Rm:no
 public static void main(String[] args) {51Testing软件测试网#AQiwL-o
  SerializeToFlatFile ser = new SerializeToFlatFile();
6J3K4^\(~u)|0Ejv\K0  ser.savePerson();
[,tHpI:F0  ser.restorePerson();51Testing软件测试网5` D1x-I.m'{5D uv5Z
 }51Testing软件测试网|.ob;t_ F p
 51Testing软件测试网h3Rl5S-i3n$@
 public void savePerson(){51Testing软件测试网 I2x9e3i0f.|~ R5~
  Person myPerson = new Person("Jay", 24);51Testing软件测试网 ` Vuh/|lp9eR'd_
  try{
rJz)CZ+X.}0   FileOutputStream fos = new FileOutputStream("E:\\person.txt");51Testing软件测试网'jg7`"s^pk
   ObjectOutputStream os = new ObjectOutputStream(fos);51Testing软件测试网a U7h4` Yy4_(gje
   System.out.println("Person--Jay,24---Written");
j~4PLx+W&hc0   
2SbF ap7W0   oos.writeObject(myPerson);51Testing软件测试网)h2_:n/eQE Afb%Z
   oos.flush();51Testing软件测试网5IhXyi:h"{
   oos.close();51Testing软件测试网 }XS-M;k)XD!s+Y^
  }catch(Exception e){
(XTf?4Yfl0   e.printStackTrace();
+q0@6@ `5^Q |(V,t0  }
"VA(X|$R#|OV8`c0 }
,T;@5g)Gy\0 51Testing软件测试网z)J6N O&|1l+_F!~
 @SuppressWarnings("resource")51Testing软件测试网)Yu3@$W{iJ3J
 public void restorePerson(){51Testing软件测试网Q,P{ka,X+V5|
  try{
/hVEX O#i0   FileInputStream fls = new FileInputStream("E:\\person.txt");51Testing软件测试网gDL!u9^Y
   ObjectInputStream is = new ObjectInputStream(fls);
6UM%k*kQ0   51Testing软件测试网6Y cBE }
   Person myPerson = (Person)ois.readObject();
\j:f b Vr0   System.out.println("\n---------------------\n");
f:GB$yxe6F?lk&d0   System.out.println("Person --read:");
b!Q/MW1U |c|H:P0   System.out.println("Name is:"+myPerson.getName());51Testing软件测试网b |T+m?1X1S
   System.out.println("Age is :"+myPerson.getAge());51Testing软件测试网y7d&YU oh i6W?)C
   51Testing软件测试网F(wBY.tu(p
  }catch(Exception e){51Testing软件测试网h&Ib`1D#P/h(p+s/]
   e.printStackTrace();
3@VR8W#^(e;\0  }51Testing软件测试网_@w'z4\\8z1T
 }
lmh8J7QS ]^0}

\(O ]"SO7T0  输出结果: sr test.serializable.Person        I ageL namet Ljava/lang/String;xp   t Jay

xSlu*j r j051Testing软件测试网G~m Dy/_

 2、XML格式51Testing软件测试网 YO-EX"{

uD*t$v"i pY3K'\Ym051Testing软件测试网b.y;@d"PD

51Testing软件测试网 k3aY2dn*hV

//参考:http://www.cnblogs.com/bluesky5304/archive/2010/04/07/1706061.html51Testing软件测试网1L'aO E Ku5T_a DV
public class SerializeXML {
51Testing软件测试网;e:nA!x\A

b a^A6[ m0 public static void main(String[] args) {51Testing软件测试网 v~5v8]ww
  SerializeXML ser = new SerializeXML();51Testing软件测试网$D+s pdyN"C1C&t1b
  ser.serializeToXml();51Testing软件测试网4i'G PT aG e
  ser.deSerializeFromXml();
iP }4bB`+KY0 }
msM `5ysE3s \T0 public void serializeToXml(){
C]d*gn W&P8n8K0  Person[] myPersons = new Person[2];
W3`{3t.r0  myPersons[0] = new Person("Jay", 24);51Testing软件测试网F4u%o+Vn
  myPersons[1] = new Person("Tom", 23);51Testing软件测试网$f~,v5s#T T-fm^R
  51Testing软件测试网?!kd9}EZ.wW
  XStream xStream = new XStream();
'FuV/[2b0f0  xStream.alias("Person", Person.class);
6J#[!Tt&f,U,j2T6n0  try{51Testing软件测试网XPG)T q8^`
   FileOutputStream foStream = new FileOutputStream("E:\\persons.xml");51Testing软件测试网[7I6i'P1YC
   xStream.toXML(myPersons,foStream);
?v4N:qJJLg0  }catch(Exception e){
OR E*l ?nqD0   e.printStackTrace();
g&k)u\o4M0  }
$L5_Fe6i6b6`0K0 }51Testing软件测试网4b3yy"]E
 public void deSerializeFromXml(){51Testing软件测试网"Nl8[ nt&| wm
  XStream xStream = new XStream();51Testing软件测试网~ X2QA2|
  xStream.alias("Person", Person.class);
+v ^!oPR0  Person[] myPersons = null;51Testing软件测试网Mqhuo fZ7I
  try{
F'k n,N3\1a.Sy0   FileInputStream flStream = new FileInputStream("E:\\persons.xml");51Testing软件测试网 mc5In5w:U&L
   myPersons = (Person[])xStream.fromXML(flStream);
{fBWF(C0   if(myPersons!=null){
hBi1DA"^Zc_0    for(Person person:myPersons){51Testing软件测试网4x.\r'P~c
     System.out.println(person.getName());51Testing软件测试网JEh8^%\ n
     System.out.println(person.getAge());51Testing软件测试网R j!V4Zd&M_
    }51Testing软件测试网6dz^t'R'd
   }
7?^Rj%fC+z0  }catch(Exception e){
"Fa;qk-k,AD0   e.printStackTrace();51Testing软件测试网W'v?u s
  }
bb_#cn {X;SE0 }51Testing软件测试网u9E/~Iv:{
}

4_:{"_ e$r_$J^a0

;Gy/A-DN,XyWe7e0  输出结果:

b|nC5g1[I0

7RG5J8^B#LE051Testing软件测试网,XI#N Q CJI

<Person-array>
7u3m+Jn7\ F7})o0  <Person>51Testing软件测试网 } R%VlT pR2pH
    <name>Jay</name>
^Xf)ul4IZ0    <age>24</age>
'Hw3rC$IY8`"V0  </Person>
%o+c$Nk@7TymU(v0  <Person>
l(r+Z/dp\ yY0    <name>Tom</name>
2|k8mq*hh/lq0    <age>23</age>
VGLH b(i_0  </Person>51Testing软件测试网2w;g0IPyk+Sl
</Person-array>51Testing软件测试网 Lo };NrP)v
 3、JSON格式

/}#l9Had7a.\?051Testing软件测试网7I` kY k*G0f

51Testing软件测试网W9CZKi$t h VN9^

//参考:http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html51Testing软件测试网 YaR({[/@)j8B
public class SerializeJSON {
51Testing软件测试网QmL E*~y

qIq;Z;V7u6kU0 public static void main(String[] args) {
Wo%~o'z'Q.kW7Lu0  SerializeJSON serializeJSON = new SerializeJSON();51Testing软件测试网)J9yoH+x}$x@7N
  serializeJSON.writeJSON();51Testing软件测试网FQ*dE EH4{JxTS{
  serializeJSON.readJSON();
~7[3o/w'Ci"h d#{K0 }
51Testing软件测试网$`E$`$xl*T1IX9p

%u6f-Y:IS2_0 public void writeJSON(){
IT0F+}$sd0  XStream xStream = new XStream(new JettisonMappedXmlDriver());
{ iw4G'H_/IK0  Person person = new Person("geniushehe", 16);51Testing软件测试网 LiA"F'p;Vh{)jn
  try {
\-_\)XxC_0   FileOutputStream fos = new FileOutputStream("E:\\json.js");
N:R4wB B9Yg;I&Dk,H0   xStream.setMode(XStream.NO_REFERENCES);51Testing软件测试网|GP@%i,JX]
   xStream.alias("Person", Person.class);51Testing软件测试网b*gHk WJ]-^
   xStream.toXML(person, fos);51Testing软件测试网+Sg`P1}
  } catch (FileNotFoundException e) {
B%\z;N_$j0   e.printStackTrace();51Testing软件测试网 p*zeC7p+U4t
  }
3i2a}eXB0 }51Testing软件测试网:]j!@ u[wyts
 public void readJSON(){51Testing软件测试网.\_WK,M"t J
  XStream xStream = new XStream(new JettisonMappedXmlDriver());
n fbmM;RN0  Person person = null;51Testing软件测试网\V)|,D%s!} Y
  try {
"O1q~.S9K4X0   FileInputStream fis = new FileInputStream("E:\\json.js");51Testing软件测试网(`;^;S&Q-sP
   xStream.setMode(XStream.NO_REFERENCES);
G)Q.Dz0Y'N V([0   xStream.alias("Person", Person.class);51Testing软件测试网;^ D7p"c\y+MhQ
   person = (Person)xStream.fromXML(fis);51Testing软件测试网A%N4M YR[)Vc
   System.out.println(person.getName());51Testing软件测试网Z i+la.GdG
   System.out.println(person.getAge());51Testing软件测试网Uw c+i_ w1N
  } catch (FileNotFoundException e) {
R:M9aC3pn6j0   e.printStackTrace();51Testing软件测试网7[6G;|/`5c6G
  }
'N~)A-?g+{0 }
-Lk0b ~N+Z_k0}

C#V#B:z3j:t e ]0
51Testing软件测试网:sx;X0e']6Pc3N

  输出结果:51Testing软件测试网v1~4IL:}KHb:S

51Testing软件测试网fTM'Gh.qW

Z.j g j h:[,k0{"Person":{"name":"geniushehe","age":16}}
9a1W"rVv3s`T2b0

TAG:

 

评分:0

我来说两句

Open Toolbar