演示ObjectOutputStream
演示:ObjectInputStream
类:Rectangle 用来准备把此类对象写到文件中去
package com.wsysoft.lang.javaio;
import java.io.Serializable;
public class Rectangle implements Serializable {
/**
*
*/
private static final long serialVersionUID = 3724059561952064331L;
private java.lang.Double length;
private java.lang.Double width;
public Rectangle(Double length,Double width){
this.length=length;
this.width=width;
}
public Double getGirth(){
return (length+width)*2;
}
public Double getArea(){
return length*width;
}
}
类:演示把对象写到外部存储,读外部存储加载对象
外部存储:文件、Socket、通道、内部数组、Cookie等等
如EJB的statefull session bean的钝化与激活、Request/Session等对象的getAttribute
setAttribute方法,都用到这两个对象或他的子对象。
EJB实现的核心机制就是这玩意
package com.wsysoft.lang;
/**
* Packagename: com.wsysoft.lang
* Filename: ObjectOutInStream.java
* Description: 此类演示把一个对象写到文件,然后从文件读出来
* ObjectOutputStream:代表对象输出流,原生对象与Object对象都可以用这个类来实现写入
* 有了 ObjectOutputStream基本上可以不上DataOuputStream
* 常用方法:writerObject(Object object);
* ObjectInputStream: 代表对象输入流。通过他可以从外部存储加载生成对象。
* 常用方法:Object readObject();
* Copyright: Copyright (c)2011
* @author: wsysoft@gmail.com
* @version: 1.0
* Create at: 2011-7-18 下午10:06:57
*
* Modification History:
* Date Author Version Description
* ------------------------------------------------------------------
* 2011-7-18 wsysoft@gmail.com 1.0
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import com.wsysoft.lang.javaio.Rectangle;
public class ObjectOutInStream {
private static File objFile=new File("./objFile.dat");
public static void writeObjToFile(Object obj) {
FileOutputStream fOutputStream = null;
ObjectOutputStream ojbOutStream = null;
try {
fOutputStream = new FileOutputStream(objFile);
ojbOutStream = new ObjectOutputStream(fOutputStream);
// 写对象
ojbOutStream.writeObject((Rectangle) obj);
System.out.println("写一个对象到文件完成");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (ojbOutStream != null) {
try {
ojbOutStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fOutputStream != null) {
try {
fOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//从文件装载一个对象
public static Object readObjFromFile() {
Object obj = null;
try {
FileInputStream fInputStream = new FileInputStream(objFile);
ObjectInputStream objInputStream = new ObjectInputStream(
fInputStream);
obj = objInputStream.readObject();
System.out.println("从文件中装载对象到内存");
if (objInputStream != null) {
objInputStream.close();
}
if (objInputStream != null) {
objInputStream.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
return obj;
}
/**
* {方法的功能/动作描述}
* @param {引入参数名} {引入参数说明}
* @return {返回参数名} {返回参数说明}
* @exception {说明在某情况下,将发生什么异常}
*/
public static void main(String[] args) {
Rectangle rect = new Rectangle(10d, 10d);
Rectangle anotherRect;
writeObjToFile(rect);
anotherRect = (Rectangle) readObjFromFile();
System.out.println("面积:" + anotherRect.getArea());
System.out.println("周长:" + anotherRect.getGirth());
}
}
评论