当前位置:  技术问答>java相关

用Serializable实现的对象可以用流的形式存储在磁盘上,可再生,以后可以再取出来,请教!!!送分!!!

    来源: 互联网  发布时间:2015-04-06

    本文导语:  请问哪里有详细介绍Serializable实现存取磁盘的资料,实例,源代码??? 或请你给一些源代码解释一下,好么??? |  Serialize an object to a file Suppose we have a class called Queue.class. We wan...

请问哪里有详细介绍Serializable实现存取磁盘的资料,实例,源代码???
或请你给一些源代码解释一下,好么???

|
 Serialize an object to a file
Suppose we have a class called Queue.class. We want to save the state of the Queue in a file. Since our Queue extends the Vector class, the methods needed to serialize the object are already done. All we need is an input or output stream. 
First the Queue class  import java.util.Vector;
 import java.io.*;

 public class Queue extends Vector {
  /*
  ** FIFO, first in first out
  */
  Queue() {
  super();
  }
 
 void put(Object o) {
  addElement(o);
  }

 Object get() {
  if (isEmpty()) return null;
    Object o = firstElement();
    removeElement(o);
    return o;
  }

 Object peek() {
  if (isEmpty()) return null;
    return firstElement();
    }
}
 



To serialize (save the Queue state to a file) :  public static void main(String args[]) {
  Queue theQueue;
  
  theQueue = new Queue();
  theQueue.put("element 1");
  theQueue.put("element 2");
  theQueue.put("element 3");
  theQueue.put("element 4");
  System.out.println(theQueue.toString());
  
  // serialize the Queue
  System.out.println("serializing theQueue");
  try {
      FileOutputStream fout = new FileOutputStream("thequeue.dat");
      ObjectOutputStream oos = new ObjectOutputStream(fout);
      oos.writeObject(theQueue);
      oos.close();
      }
   catch (Exception e) { e.printStackTrace(); }
  }
 


To unserialize (to load a previously saved Queue) :   public static void main(String args[]) {
   Queue theQueue;
    
   theQueue = new Queue();
    
   // unserialize the Queue
   System.out.println("unserializing theQueue");
   try {
    FileInputStream fin = new FileInputStream("thequeue.dat");
    ObjectInputStream ois = new ObjectInputStream(fin);
    theQueue = (Queue) ois.readObject();
    ois.close();
    }
   catch (Exception e) { e.printStackTrace(); }
     
   System.out.println(theQueue.toString());     
   
 

|
很基本的东西要掌握.
class A implements Serializable
{
   ...;
}
A 就可以序列化了.不要实现什么方法.

write
OutputStream out = getOutStream();//可以是socket,文件等IO流
out.writeObject(a); //就可以write,否则就出NotSerializableException
存的时候是递归的存所有成员变量.

read
InputStream in = getInputStream();
a = in.readObject(a);

当然,一个大的类有时不需要存所有的成员变量,有两个方法解决
(1)在不需要序列话的成员变量前加transient关键字.
(2)Class A 不实现Serializable,实现Externalizable,能实现最大的控制权
   自己来写  writeExternal ,readExternal
我在我的项目里全用Externalizable,自由度大.该存的存,不该存的不存.
Serialize相关的概念就是Stream,说起来就麻烦了,说实话有时间发贴子,还不如看书,看jdk source很有收获的.

|
    楼上的说法有些问题。    

    如果类中的所有的成员变量的类型都已实现了Serializable接口(例如成员变量的类型是LinkedList,Vector等),那么该类只要实现简单的加上"implements Serializable"就可以序列化了;

    但是如果成员变量的类型没有实现Serializable接口,上面的做法就会出问题。



    

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.io接口objectstreamconstants的类成员方法: sc_serializable定义及介绍
  • java.io.Serializable的问题
  • java命名空间java.beans.beancontext类beancontextservicessupport的类成员方法: serializable定义及介绍
  • javabeans必须实现serializable接口吗?
  • java命名空间java.sql接口connection的类成员方法: transaction_serializable定义及介绍
  • 好多地方都要实现Serializable,有什么意义!
  • java序列化实现Serializable接口
  • Serializable和Synchronization在java中干什么用的?来者有分
  • 请问SCJP要考Object Stream/Serializable Interface/Sockets吗?急急急
  • 谁知道Bean中的序列化(implements Serializable)的用处,及如何用?
  • Serializable 的作用?
  • 真正请教:Serializable接口有哪些主要作用,为什么它与Socket类可实现邮件发送?在概念或原理上是如何实现的呢?
  • Serializable?使用和意思?在thinking in java里面看了半天一天也没有明白什么意思!谢谢高手大虾了
  • Socket中使用Serializable发送出错。
  • java 序列化对象 serializable 读写数据的实例
  • 如何让一个Vector类型serializable?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3