序列化与反序列化机制
序列化机制是为了将对象进行传输,将对象通过序列化机制转换成二进制流,再通过反序列化恢复成对象
对于系统类,String 和基本数据类型都是默认支持序列化机制的,对于自定义类想要实现序列化机制,
1:继承Serializable接口
2:创建全局常量 serialVersionUID public static final long serialVersionUID=14656556L;
3:类里面的所有属性必须是可序列化的,如果有另一个自定义类属性,必须也要去支持此机制
1 /** 2 * 对象流的使用: 3 * ObjectInputStream,ObjectOutputSteam 4 * 作用:用于存储和读取基本数据类型数据或对象的处理流,可以把Java中的对象进行传输 5 * 允许将内存中的Java对象转换成与平台无关的二进制流,从而允许吧这种二进制流持久的保存在磁盘上,或者通过网络 6 * 将这种二进制流传输到另一个网络节点,但其它程序获取了这种二进制流,就可以恢复成原来的java对象 7 * ************** 8 * 序列化的好处在于可以将任何实现了Serializable接口的对象转换成字节数据,使其在传输或者保存时可以被还原 9 * ************** 10 * 序列化是RMI(远程方法调用,Remove Method Invoke)过程的参数和返回值都必须实现的机制,PMI是JavaEE的基础 11 * 因此序列化机制是JavaEE平台的基础 12 * ************* 13 * 如果需要让某个对象支持序列化机制,必须让对象所属的类及其属性是可序列化的,为了让某个类是可序列化的, 14 * 该类必须实现如下两个接口:Serializable,Externalizable 15 * ************ 16 * 对于Static修饰的变量是不能序列化与反序列化的 17 * 18 * 19 * 20 * 21 * 22 */ 23 public class ObjectInputStreamTest implements Serializable{ 24 /** 25 * 序列化过程:将内存中的Java对象保存到磁盘中或者通过网络传输出去 26 * 使用ObjectInputStream实现 27 */ 28 @Test 29 public void test(){ 30 ObjectOutputStream ob= null; 31 try { 32 ob = new ObjectOutputStream(new FileOutputStream("object.dat")); 33 ob.writeObject(new String("我爱中国")); 34 ob.flush(); 35 ob.writeObject(new hpppp("hpp",20)); 36 ob.flush(); 37 } catch (IOException e) { 38 e.printStackTrace(); 39 } finally { 40 try { 41 ob.close(); 42 } catch (IOException e) { 43 e.printStackTrace(); 44 } 45 } 46 } 47 //反序列化过程:objectInputStream 48 @Test 49 public void test2() throws IOException{ 50 ObjectInputStream obj= new ObjectInputStream(new FileInputStream("object.dat")); 51 Object object= null; 52 try { 53 object = obj.readObject(); 54 hpppp h=(hpppp) obj.readObject(); 55 System.out.println(h); 56 } catch (ClassNotFoundException e) { 57 e.printStackTrace(); 58 } 59 String str=(String) object; 60 System.out.println(str); 61 62 obj.close(); 63 } 64 } 65 class hpppp implements Serializable{ 66 //自定义类可以实现序列化机制的前提 67 // 继承Serializable接口, 68 // 提供一个全局常量serialVersionUID 69 // 类里面的属性也是要可序列化的,String可以,基本数据类型默认也是可以的 70 public static final long serialVersionUID=-4998231495L; 71 String name; 72 int age; 73 public hpppp(String name, int age) { 74 this.name = name; 75 this.age = age; 76 } 77 78 @Override 79 public String toString() { 80 return name+":"+age; 81 } 82 }
浙公网安备 33010602011771号