Serializable(长时间保存对象 方法一)

Serializable:保存对象,即  lightweight persistence(不太重要的对象保存很久)

                   而且也是一个字节一个字节的保存,所以能在不同操作系统下恢复.

                 找一张Unicode 表, 一些Class 类:没事时自己也能反编译,变成.java文件。

                 WinHex.exe:这个软件非常好用。

一、Serializable 的实现,只需两步:

       第一:  类   implements Serializable   :tagging interface,只有一个接口名。

                  引入tagging inteface目的:和现实世界一样,把类分成各种各样的类型。

                  1、建立一个共同的父类(Creates a common parent)

                  2、Adds a data type to a class,

                the class becomes an interface type through polymorphism.

                 如:老师 (这是一个没有任何方法的空接口)

                    幼儿园老师,小学老师 ,初中老师,(这是具体实现类)

   第二:保存地方有两个

          1、保存到文件

              出:ObjectOutputStream------FileOutputStream       

                         writeObject(东西1)

                      东西1:1>new的对象

                                  2>可以是String

                                  3>可以是所有的原始类型primitive()

                     理由:ObjectOutputStream-----ObjectOutput extends DataOutput  

                             有 DataOutputStream ------ DataOutput 一样的方法(即共享相同的接口)

                        

              入:ObjectInputStream------ FileInputStream("worm.out"));     in.readObject()

       2、保存到 ByteArray  缓冲区中

           出:ObjectOutputStream------ByteArrayOutputStream         writeObject()

           入:ObjectInputStream------ ByteArrayInputStream("worm.out"));    

                  in.readObject(东西2) :读的顺序和保存时一直。                 

二、private transient String password;

  transient:表示不需要保存。

   有两种形势:1、Worn类里面 有transient 的成员表示不保存。
  Worn w = new Worn(6, 'a');
  out.writeObject(w);  

           2、但是也可以单独指定保存。

            private transient String b;

         private void writeObject(ObjectOutputStream stream) throws IOException {
  stream.writeObject(b);
     }

              SerialCtl sc = new SerialCtl("Test1", "Test2") 

              stream.writeObject(sc);       

       

三、代码 :
     

  package io;

import static net.mindview.util.Print.print;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Random;


class Data implements Serializable {
private int n;
public Data(int n) {
this.n = n;
}

public String toString() {
return Integer.toString(n);
}
}

public class Worn implements Serializable {
/**

*/ //1 占8个字节。
private static final long serialVersionUID = 1L;
private static Random rand = new Random(47);
private Data[] d = { new Data(rand.nextInt(10)),
                     new Data(rand.nextInt(10)),

                                     new Data(rand.nextInt(10)) };
private Worn next;
private char c;

// Value of i == number of segments
public Worn(int i, char x) {
print("Worm constructor: " + i);
c = x;
if (--i > 0)
next = new Worn(i, (char) (x + 1));
}

public Worn() {
print("Default constructor");
}

public String toString() {
StringBuilder result = new StringBuilder(":");
result.append(c);
result.append("(");
for (Data dat : d)
result.append(dat);
result.append(")");
if (next != null)
result.append(next);
return result.toString();
}

public static void main(String[] args) throws ClassNotFoundException,
IOException {
Worn w = new Worn(6, 'a');
print("w = " + w);
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("worm.txt"));
out.writeObject("Worm storage\n");
out.writeObject(w);
out.close(); // Also flushes output
ObjectInputStream in = new ObjectInputStream(new FileInputStream("worm.txt"));
String s = (String) in.readObject();
Worn w2 = (Worn) in.readObject();
print(s + "w2 = " + w2);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out2 = new ObjectOutputStream(bout);
out2.writeObject("Worm storage\n");
out2.writeObject(w);
out2.flush();
ObjectInputStream in2 = new ObjectInputStream(new ByteArrayInputStream(
bout.toByteArray()));
s = (String) in2.readObject();
Worn w3 = (Worn) in2.readObject();
print(s + "w3 = " + w3);
}
}

       


  【资料】   http://www.tutorialspoint.com/java/java_interfaces.htm

  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值