一 序列化和反序列化
序列化就是把一个类的对象封装成一个文件,用于传输和存储。反序列化就是把该文件还原到之前的对象。
二 实例研究:本实例针对序列化存储一个集合数据和反序列化得到集合数据。在代码中注意相关代码的注释和解开注释,便于测试。
首先要将序列化的对象继承Serializable
public class SerializableMap implements Serializable {
private static final long serialVersionUID = 1L;
private ArrayList<HashMap<Integer, String>> downLoadDataList =new ArrayList<HashMap<Integer,String>>();
public ArrayList<HashMap<Integer, String>> getDownLoadDataList() {
return downLoadDataList;
}
public void setDownLoadDataList(
ArrayList<HashMap<Integer, String>> downLoadDataList) {
this.downLoadDataList = downLoadDataList;
}
}
public class Test {
/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//测试序列化集合存储和反序列化读取数据=================
//向集合中写入数据
ArrayList<HashMap<Integer,String>> datalist = new ArrayList<HashMap<Integer,String>>();
for(int i=0;i<5;i++)
{
HashMap<Integer,String> itemdata = new HashMap<Integer,String>();
itemdata.put(0, String.valueOf(i));
itemdata.put(1, String.valueOf(2*i));
datalist.add(itemdata);
}
ArrayList<HashMap<Integer,String>> datalist2 = new ArrayList<HashMap<Integer,String>>();
SerializableMap tmpmap = new SerializableMap();
tmpmap.setDownLoadDataList(datalist);
datalist2 = saveAndGetData(tmpmap);
System.out.println(datalist2.toString());
}
//存储序列化的集合和读取存储的数据
public static ArrayList<HashMap<Integer,String>> saveAndGetData(SerializableMap tmpmap)
{
ArrayList<HashMap<Integer,String>> rearraylist = null;
FileOutputStream fileOutputStream = null;
ObjectOutputStream objectOutputStream = null;
FileInputStream fileInputStream = null;
ObjectInputStream objectInputStream = null;
try {
//存入数据
File file = new File("D:/"+"markfirst.txt");
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if (!file.exists()) {
file.createNewFile();
}
//该段代码将序列化的数据写入文件
/* fileOutputStream= new FileOutputStream(file.toString());
objectOutputStream= new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(tmpmap);*/
//取出数据
fileInputStream = new FileInputStream(file.toString());
objectInputStream = new ObjectInputStream(fileInputStream);
SerializableMap mMap =(SerializableMap) objectInputStream.readObject();
// ((ProjectNameApp) ProjectNameApp.getAPP()).setDownLoadDataList(mMap.getDownLoadDataList());
rearraylist = mMap.getDownLoadDataList();
/* for (int i = 0; i < savedArrayList.size(); i++) {
//System.out.println("取出的数据:" + savedArrayList.get(i).toString());
}*/
} catch (Exception e) {
// TODO: handle exception
}finally{
if (objectOutputStream!=null) {
try {
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileOutputStream!=null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (objectInputStream!=null) {
try {
objectInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileInputStream!=null) {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return rearraylist;
}
}