打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java - Externalizable接口的用法
userphoto

2007.07.19

关注



Externalizable接口继承了Serializable接口,用来在序列化时手动的把需要的对象信息进行序列化。
Externalizable接口提供了两个方法:writeExternal(ObjectOuput out) 和 readExternal(ObjectInput in)
在你需要被序列化的类中实现这两个方法,这样在此类序列化时这两个方法将被自动执行,用以可定制地序列化此类。举例如下:
假如你需要序列化一个类Test:

import java.io.*;

class Test implements Externalizable{  //Test类必须实现Externalizable接口
 private String letterstates = "fanruijun";
 private int num  = 0;
 public Test(){
 }
 
 public void writeExternal(ObjectOutput out) throws IOException {
              out.writeObject(letterstates);
              out.write(88); //在序列化的数据最后加个88
 }

 public void readExternal(ObjectInput in) throws IOException,
    ClassNotFoundException {
                letterstates = (String)in.readObject();
                num = in.read();  //把数字88加进来
 }
 public void putOut(){ //测试
   System.out.println(letterstates +num);
 }
}


序列化上面的Test类:AppTest

import java.io.*;

public class AppTest {


        private void saveGame(){
                Test m = new Test();
                if (m != null){
                        try{
                                FileOutputStream ostream = new FileOutputStream("t.txt");
                                ObjectOutputStream p = new ObjectOutputStream(ostream);

                                p.writeObject(m); //writeExternal()自动执行

                                p.flush();
                                ostream.close();
                        } catch (IOException ioe) {
                                System.out.println ("Error saving file:");
                                System.out.println (ioe.getMessage());
                        }
                }
        }

        private void loadGame(){
                try{
                        FileInputStream instream = new FileInputStream("t.txt");
                        ObjectInputStream p = new ObjectInputStream(instream);
                        Test m = (Test)p.readObject();//readExternal()自动执行
               
   m.putOut();
                        instream.close();
                } catch (Exception e) {
                        System.out.println ("Error loading file:");
                        System.out.println (e.getMessage());
  }
        }

 public static void main(String[] args){
  new AppTest().saveGame();
  new AppTest().loadGame();
 }
}

运行结果:
D:\test\basic>javac AppTest.java

D:\test\basic>javac Test.java

D:\test\basic>java AppTest
fanruijun88











本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java对象的序列化和反序列化实践
Java 序列化深入分析
JAVA语言序列化和反序列化一目了然(二)加深
java基础
java对象序列化学习笔记_Love Sun,Love Life
java序列化(Serializable)的作用和反序列化
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服