1、序列化的原因: 方便在网络中传输,或者,磁盘保存/读取对象。
2、本质:流化。(将数据分解成字节流,将其保存在文件中,或者在网络中传输)
序列化是一个过程,由jvm完成。
序列化:将数据转换成字节流在网络中传入或存储在存储介质。
反序列化:打开字节流,将网络中的字节流或者存储介质中的数据,变成对象。
{序列化和反序列化}
3.依赖
ObjectOutputStream ----------------->(OutputStream)
ObjectInputStream--------------->(InputStream)
//序列化
public class Test03 implements Serializable { //Serizliable :可被序列化
UserInfo ul = new UserInfo("11","你好");
try{
//创建输出流,关联目标文件
OutputStream out = new FileOutputStreams("c:\aa\datainfo");
//创建对象输出流
ObjectOutputStream o = new ObjectOutStream(out);
// 写入数据
o.writeObject(ul);
o.flush();
o.close();
out.close();
}catch(Exception e){
e.printStreckTrace();
}
}
//反序列化
public class Test03 implements Serializable { //Serizliable :可被序列化
try{
InputStream in = new FileInputStrean("c:\aa\datainfo");
ObjectInputStream i = new ObjectIntStream(in);
UserInfo u =(UserInfo) i.readObject();
System.out.println(u.getName());
i.close();
}catch(Exception e){
e.printStreckTrace();
}
}
//(序列化的增删改查)
//创建序列化工具-------> SerTools
package com.it.fao;
public class SerTools{
private static final File data= new File("c:\aa\data.info"); //定义一个文件路径
static {
try{
List<userInfo> us = new ArrayList<UserInfo>();
memoryhardpan(us);
}catch(Exception e){
e.printStreckTrace();
}
}
/**添加功能*/
public static void add(UserInfo u){
//得到集合
List<UserInfo> us = hardpanmemory();
//改变集合
us.add(u);
//将集合写入文件
memoryhardpan(us);
}
/**删除功能*/
public static void del(String user_id){
List<UserInfo> us = hardpanmemory();
for(UserInfo userinfo : us){
if(userinfo.getId().eauals(user_id)){
us.remove(userInfo);
}
}
memoryhardpan(us);
}
/**按编号查询功能*/
public static UserInfo findUserbyId(String user_id){
List<UserInfo> us = hardpanmemory();
for (UserInfo userInfo : us) {
if (us.get(0).getId().equals(id)) {
return userInfo;
}
}
return null;
}
/**修改数据*/
public void upd(UserInfo u){
try{
List<UserInfo> us = hardpanmemory();
for(int i = 0l i<list.size();i++){
if(u.getUser_id().equales(us.get(i).getUser_id)){
list.get(i) .setUser_name("人生而痛苦.......");
}
}
memoryhardpan(us);
}catch(Exception e){
e.printStreckTrace();
}
}
//将集合序列化到磁盘(实现序列化)
public static void memoryhardpan(List<UserInfo> us){ //内存到磁盘
try{
OutputStream out = new FileOutputStreams(data);
ObjectOutputStream o = new ObjectOutStream(out);
o.writeObject(us);
o.flush();
o.close();
out.close();
}catch(Exception e){
e.printStreckTrace();
}
}
//反序列化 得到一个集合
public static List<UserInfo> hardpanmemory(){ //磁盘到内存
try{
InputStream in = new FileInputStrean(data);
ObjectInputStream i = new ObjectIntStream(in);
List<UserInfo>us = (List<UserInfo>) i.readObject();
i.close();
in.close();
return us;
}catch(Exception e){
e.printStreckTrace();
return null;
}
}
public static viod main(String[]args){
System.out.println("------->添加前");
List<UserInfo> us = hardmemory();
for(UsrInfo userInfo:us){
System.out.println(userInfo.getName());
}
UserInfo ul = new UserInfo("1001","张三");
add(ul);
//del("1001");
//upd(ul);
System.out.println("------->添加后");
us = hardmemory();
for(UsrInfo userInfo:us){
System.out.println(userInfo.getName());
}
}