序列化操作

package functionitegretion.customfunction;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.util.EncodingUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class SerializableHelper {
private static SerializableHelper _serializer;

public static SerializableHelper Instantiation() {
if (_serializer == null) {
_serializer = new SerializableHelper();
}
return _serializer;
}

// [start] 实现了Serializable接口的序列化与反序列化
/**
* 使用writeObject写入Xml
* @param path 持久化对象路径
* @param object 需要序列化的对象
*/
public void doSerializer(String path,Object object){
try{
FileOutputStream fstream = new FileOutputStream(new File(path));
ObjectOutputStream stream = new ObjectOutputStream(fstream);
stream.writeObject(object);
}catch(Exception e){
e.printStackTrace();
}
}

/**
* 使用readObject解析持久化对象数据
* @param path 持久化对象数据地址
* @return 反序列化的对象
*/
public Object doDeserialize(String path){
try{
FileInputStream instream = new FileInputStream(new File(path));
ObjectInputStream stream = new ObjectInputStream(instream);
return stream.readObject();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
// [end]

// [start] XmlSerializer序列化
private void Serializer(Object object,XmlSerializer serializer){
try{
Field[] fields = object.getClass().getFields();
for (Field item : fields) {
serializer.startTag(null, item.getName());
if(item.getType().getName().toString().equals("java.util.ArrayList")){
Serializer(item.getType(), serializer);
}
else{
serializer.text(item.get(object) == null ? "" : item.get(object).toString());
}
serializer.endTag(null, item.getName());
}
}catch(Exception e){
e.printStackTrace();
}
}

/**
* 单个对象序列化成Xml
*
* @param object
* 待序列化的对象
* @param fos
* Xml输出流
* @return
*/
public void doSerializer(Object object, String path) {
try {
FileOutputStream stream = new FileOutputStream(path);
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(stream, "UTF-8");
serializer.startDocument("UTF-8", true);
serializer.startTag(null, object.getClass().getSimpleName());

Serializer(object, serializer);

serializer.endTag(null, object.getClass().getSimpleName());
serializer.endDocument();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* List<T>序列化成Xml
*
* @param list
* 待序列化的对象
* @param fos
* Xml输出流
*/
public <T> void doSerializer(List<T> list, String path) {
try {
FileOutputStream stream = new FileOutputStream(path);
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(stream, "UTF-8");
serializer.startDocument("UTF-8", true);
serializer.startTag(null, list.getClass().getSimpleName());
for (T item : list) {
serializer.startTag(null, item.getClass().getSimpleName());

Serializer(item, serializer);

serializer.endTag(null, item.getClass().getSimpleName());
}

serializer.endTag(null, list.getClass().getSimpleName());
serializer.endDocument();
} catch (Exception e) {
e.printStackTrace();
}
}
// [end]

// [start] XStream序列化xml
/**
* XStream生成xml
* @param obj 待序列化对象
* @param path 序列化xml地址
*/
public void doXStreamToXml(Object obj, String path){
try {
FileOutputStream stream = new FileOutputStream(path);
XStream x = new XStream(new DomDriver());
stream.write(x.toXML(obj).getBytes("UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* XStream解析xml
* @param path 待解析xml地址
* @return 解析结果
*/
public Object doXSteamToObject(String path){
try{
FileInputStream stream = new FileInputStream(path);
byte [] buffer = new byte[stream.available()];
stream.read(buffer);
XStream x = new XStream(new DomDriver());
x.autodetectAnnotations(true);
return x.fromXML(EncodingUtils.getString(buffer, "UTF-8"));
}catch(Exception e){
e.printStackTrace();
return null;
}
}
// [end]


// [end]
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值