当前位置: 技术问答>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());
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很有收获的.
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接口,上面的做法就会出问题。
如果类中的所有的成员变量的类型都已实现了Serializable接口(例如成员变量的类型是LinkedList,Vector等),那么该类只要实现简单的加上"implements Serializable"就可以序列化了;
但是如果成员变量的类型没有实现Serializable接口,上面的做法就会出问题。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。