先说下为什么我们要将对象存储起来。使用缓存机制不仅可以为用户节省流量,同时还可以给用户带来好的用户体验。
class MyBean implements Serializable {
private static final long serialVersionUID = 1L;
private boolean myBoolean;
private String myString;
private Vector<String> myVector;
public MyBean() {
}
public boolean isMyBoolean() {
return myBoolean;
}
public void setMyBoolean(boolean myBoolean) {
this.myBoolean = myBoolean;
}
public String getMyString() {
return myString;
}
public void setMyString(String myString) {
this.myString = myString;
}
public Vector<String> getMyVector() {
return myVector;
}
public void setMyVector(Vector<String> myVector) {
this.myVector = myVector;
}
}
存储的对象一定要继承Serializable接口序列化 为什么要序列化对象:
在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如: MyBean myFoo = new MyBean (); myFoo .setString(“37”); myFoo.setMyBoolean(true); 当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,true)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。
Test
public static void main(String[] args) throws Exception { MyBean mb = new MyBean(); mb.setMyBoolean(true); mb.setMyString("xml is cool"); Vector<String> v = new Vector<String>(); v.add("one"); v.add("two"); v.add("three"); mb.setMyVector(v); String fileString = "D:/a.dat"; ObjectDatUtil.object2Dat(mb, fileString); MyBean tt = ObjectDatUtil.dat2Object(fileString,MyBean.class); Vector<String> vector = (Vector<String>) tt.getMyVector(); System.out.println(vector.toString()); System.out.println(tt.getMyString()); System.out.println(tt.isMyBoolean()); }
工具类:
public class ObjectDatUtil {
private static ObjectDatUtil objectDatUtil = null;
private ObjectDatUtil() {
}
public ObjectDatUtil getInstance() {
if (objectDatUtil == null) {
objectDatUtil = new ObjectDatUtil();
}
return objectDatUtil;
}
/**
* 将对象转换为DAT文件存储
*
* @param object
* 要存储的对象
* @param filePath
* 带完全的保存路径的文件名
* @throws FileNotFoundException
* @throws IOException
* @throws Exception
*/
public static void object2Dat(Object object, String fileName)
throws FileNotFoundException, IOException, Exception {
// 创建输出文件
File fo = new File(fileName);
// 文件不存在,就创建该文件
if (!fo.exists()) {
// 先创建文件的目录
String path = fileName.substring(0, fileName.lastIndexOf('.'));
File pFile = new File(path);
pFile.mkdirs();
}
FileOutputStream fs = new FileOutputStream(fileName);
ObjectOutputStream oo = new ObjectOutputStream(fs);
oo.writeObject(object);
oo.flush();
oo.close();
fs.close();
}
/**
* 将DAT文件转换为object对象
*
* @param objSource
* DAT文件路径
* @return 返回对象
* @throws IOException
*/
@SuppressWarnings("unchecked")
public static <T> T dat2Object(String objSource, Class<T> class1) {
T object = null;
FileInputStream fi = null;
ObjectInputStream oi = null;
try {
fi = new FileInputStream(objSource);
oi = new ObjectInputStream(fi);
object = (T)oi.readObject();
} catch (Exception e) {
e.printStackTrace();
object = null;
} finally {
try {
oi.close();
fi.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return object;
}
}