Java 序列化與反序列化 工具類 Demo

測試對象

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!-------------");
	}

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章