測試對象
package com.basic.serialize;
import java.io.Serializable;
/**
* @author chichuduxing
* @date 2017年2月3日 下午12:12:30
*/
public class DemoObject implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8891296985717552768L;
/**
* 屬性值.
*/
public String identityValue;
/**
* 屬性類型.
*/
public String identityType;
/**
* 模型ID.
*/
public String modelId;
/**
* transient關鍵字申明該字段不會被序列化</br>
* 用戶ID.
*/
public transient String userId;
}
序列化與反序列化工具類
package com.basic.serialize;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.URLDecoder;
import java.net.URLEncoder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* 序列化/反序列化工具
*
* @author chichuduxing
* @date 2017年2月3日 下午1:28:38
*/
public class SerivalizeUtils {
private static final Log logger = LogFactory.getLog(SerivalizeUtils.class);
/**
* 把對象序列化到文件中.
*
* @param filename
* 輸出文件名
* @param serObj
* 要序列化的對象
* @return
*/
public static boolean SerializeToFile(String filename, Serializable serObj) {
boolean returnflag = false;
if (null == filename || filename.isEmpty()) {
logger.error("SerializeToFile input filename is empty!");
return returnflag;
}
if (null == serObj) {
logger.error("SerializeToFile input Object is null!");
return returnflag;
}
File file = new File(filename);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
return returnflag;
}
}
FileOutputStream fileOutStream = null;
ObjectOutputStream objOutStream = null;
try {
fileOutStream = new FileOutputStream(filename);
objOutStream = new ObjectOutputStream(fileOutStream);
objOutStream.writeObject(serObj);
returnflag = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != objOutStream) {
try {
objOutStream.close();
} catch (IOException e) {
}
}
if (null != fileOutStream) {
try {
fileOutStream.close();
} catch (IOException e) {
}
}
}
return returnflag;
}
/**
* 把對象從文件中反序列化.
*
* @param filename
* 文件名
* @return 反序列化結果
*/
public static Object DeSerializeFromFile(String filename) {
Object obj = null;
if (null == filename || filename.isEmpty()) {
logger.error("DeSerializeFromFile input filename is empty!");
return obj;
}
FileInputStream fileInStream = null;
ObjectInputStream objInStream = null;
try {
fileInStream = new FileInputStream(filename);
objInStream = new ObjectInputStream(fileInStream);
obj = objInStream.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != objInStream) {
try {
objInStream.close();
} catch (IOException e) {
}
}
if (null != fileInStream) {
try {
fileInStream.close();
} catch (IOException e) {
}
}
}
return obj;
}
/**
* 把對象虛擬化成String,並將序列化的結果編碼.
*
* @param object
* 要序列化的對象
* @return 序列化的結果
*/
public static String SerializeToString(Object object) {
String serStr = null;
if (null == object) {
logger.error("SerializeToString input Object is null!");
return serStr;
}
ByteArrayOutputStream byteArrayOutStream = null;
ObjectOutputStream objOutStream = null;
try {
byteArrayOutStream = new ByteArrayOutputStream();
objOutStream = new ObjectOutputStream(byteArrayOutStream);
objOutStream.writeObject(object);
serStr = byteArrayOutStream.toString("ISO-8859-1");
serStr = URLEncoder.encode(serStr, "UTF-8");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != objOutStream) {
try {
objOutStream.close();
} catch (IOException e) {
}
}
if (null != byteArrayOutStream) {
try {
byteArrayOutStream.close();
} catch (IOException e) {
}
}
}
return serStr;
}
/**
* 把對象從字符串中反序列化.
*
* @param serStr
* 字符串
* @return 反序列化結果
*/
public static Object DeSerializeFromString(String serStr) {
Object obj = null;
if (null == serStr || serStr.isEmpty()) {
logger.error("DeSerializeFromString input serStr is empty!");
return serStr;
}
ByteArrayInputStream byteArrayInStream = null;
ObjectInputStream objInStream = null;
try {
serStr = URLDecoder.decode(serStr, "UTF-8");
byteArrayInStream = new ByteArrayInputStream(serStr.getBytes("ISO-8859-1"));
objInStream = new ObjectInputStream(byteArrayInStream);
obj = objInStream.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != objInStream) {
try {
objInStream.close();
} catch (IOException e) {
}
}
if (null != byteArrayInStream) {
try {
byteArrayInStream.close();
} catch (IOException e) {
}
}
}
return obj;
}
}
測試
package com.basic.serialize;
import java.io.File;
import java.util.ArrayList;
/**
* @author chichuduxing
* @date 2017年2月3日 下午12:12:17
*/
public class TestMain {
public static void main(String[] args) {
ArrayList<DemoObject> list = new ArrayList<DemoObject>();
InitData(list);
TestFile(list);
TestString(list);
}
private static void InitData(ArrayList<DemoObject> list) {
DemoObject demoobj1 = new DemoObject();
demoobj1.identityType = "1";
demoobj1.identityValue = "2";
demoobj1.modelId = "3";
demoobj1.userId = "4";
list.add(demoobj1);
DemoObject demoobj2 = new DemoObject();
demoobj2.identityType = "11";
demoobj2.identityValue = "22";
demoobj2.modelId = "33";
demoobj2.userId = "44";
list.add(demoobj2);
DemoObject demoobj3 = new DemoObject();
demoobj3.identityType = "111";
demoobj3.identityValue = "222";
demoobj3.modelId = "333";
demoobj3.userId = "444";
list.add(demoobj3);
DemoObject demoobj4 = new DemoObject();
demoobj4.identityType = "中國";
demoobj4.identityValue = "測試";
demoobj4.modelId = "啊、t\ts";
demoobj4.userId = "張三\u0019";
list.add(demoobj4);
}
private static void TestFile(ArrayList<DemoObject> list) {
System.out.println("-------------TestFile start!-------------");
String filename = "Serialize" + File.separatorChar + "DemoObject.ser";
SerivalizeUtils.SerializeToFile(filename, list);
Object serObj = SerivalizeUtils.DeSerializeFromFile(filename);
if (serObj instanceof ArrayList) {
for (Object demo : (ArrayList<Object>) (serObj)) {
if (demo instanceof DemoObject) {
System.out.println("identityType:" + ((DemoObject) demo).identityType);
System.out.println("identityValue:" + ((DemoObject) demo).identityValue);
System.out.println("modelId:" + ((DemoObject) demo).modelId);
System.out.println("userId:" + ((DemoObject) demo).userId);
System.out.println("**********************************");
}
}
}
System.out.println("-------------TestFile done!-------------");
}
private static void TestString(ArrayList<DemoObject> list) {
System.out.println("-------------TestString start!-------------");
String serString = SerivalizeUtils.SerializeToString(list);
Object serObj = SerivalizeUtils.DeSerializeFromString(serString);
if (serObj instanceof ArrayList) {
for (Object demo : (ArrayList<Object>) (serObj)) {
if (demo instanceof DemoObject) {
System.out.println("identityType:" + ((DemoObject) demo).identityType);
System.out.println("identityValue:" + ((DemoObject) demo).identityValue);
System.out.println("modelId:" + ((DemoObject) demo).modelId);
System.out.println("userId:" + ((DemoObject) demo).userId);
System.out.println("**********************************");
}
}
}
System.out.println("-------------TestString done!-------------");
}
}