java序列化对象,与xml格式字符串互转,与Blob互转.
依赖包commons-lang-2.3.jar、hibernate-3.1.3.fix.jar、xstream-1.2.2.jar
代码实现
package edu.mahh;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.sql.Blob;
import java.sql.SQLException;
import org.apache.commons.lang.SerializationUtils;
import org.hibernate.Hibernate;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class SerializUtil implements Serializable {
/**
*
*/
private static final long serialVersionUID = 3068282609202318740L;
public static byte[] objToBytes(Serializable obj) {
return SerializationUtils.serialize(obj);
}
public static Serializable bytesToObj(byte[] bytes) {
return ((Serializable) SerializationUtils.deserialize(bytes));
}
public static String objToString(Serializable obj) {
if (obj == null)
return null;
String ret = null;
BASE64Encoder encoder = new BASE64Encoder();
String xml = objToXML(obj);
ret = encoder.encode(objToBytes(xml));
return ret;
}
public static Serializable stringToObj(String str) throws IOException {
if (str == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
String xml = (String) bytesToObj(decoder.decodeBuffer(str));
return ((Serializable) xmlToObj(xml));
}
public static Blob objToBlob(Serializable obj) {
if (obj == null)
return null;
System.out.println("save xml with base64");
return Hibernate.createBlob(objToBytes(objToString(obj)));
}
public static Serializable blobToObj(Blob blob) {
if (blob == null)
return null;
try {
InputStream is = blob.getBinaryStream();
ObjectInputStream objStream = new ObjectInputStream(is);
Object obj = objStream.readObject();
if (String.class.equals(obj.getClass())) {
Serializable ret = stringToObj((String) obj);
return ret;
}
return ((Serializable) obj);
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
public static void saveToFile(Serializable obj, String fileName) throws IOException {
InputStream is = new ByteArrayInputStream(objToBytes(obj));
FileOutputStream fos = new FileOutputStream(fileName);
byte[] buf = new byte[10240];
int len = -1;
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.close();
}
public static Serializable readFromFile(String fileName) throws SQLException, IOException,
ClassNotFoundException {
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream is = new ObjectInputStream(fis);
return ((Serializable) is.readObject());
}
public static void saveToFileAsXml(Object obj, String fileName) throws IOException {
String xml = objToXML(obj);
FileWriter fileWriter = new FileWriter(fileName);
fileWriter.write(xml);
fileWriter.close();
}
public static Object readFromXmlFile(String fileName) throws IOException, ClassNotFoundException {
StringBuffer sBuffer = new StringBuffer();
FileReader fReader = new FileReader(fileName);
BufferedReader br = new BufferedReader(fReader);
String data = null;
while ((data = br.readLine()) != null) {
sBuffer.append(data);
}
return xmlToObj(sBuffer.toString());
}
public static String objToXML(Object obj) {
XStream xStream = new XStream(new DomDriver());
return xStream.toXML(obj);
}
public static Object xmlToObj(String xml) {
XStream xStream = new XStream(new DomDriver());
return xStream.fromXML(xml);
}
}
Eclipse工程下载地址,http://download.csdn.net/detail/asiaasia666/9228047