java对象序列化
来源:互联网 发布:阿里云 pptp 无法连接 编辑:程序博客网 时间:2024/05/31 11:03
1、序列化是干什么的?
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
只能将支持 java.io.Serializable 接口的对象写入流中。每个 serializable 对象的类都被编码,编码内容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有对象的闭包。
2、什么情况下需要序列化
3、当对一个对象实现序列化时,究竟发生了什么?
java 代码
Foo
myFoo .setWidth(37);
myFoo.setHeight(70);
序列化的API
java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。只有实现了Serializable和Externalizable接口的类的对象才能被序列化。
java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。
java 代码
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myFoo);
4、实现序列化(保存到一个文件)的步骤
java 代码
FileOutputStream fs = new FileOutputStream("foo.ser");
java 代码
ObjectOutputStream os =
java 代码
os.writeObject(myObject1);
os.writeObject(myObject2);
os.writeObject(myObject3);
java 代码
os.close();
5、举例说明
- package
com.hotye.dchaoxiong.serializabletest; -
- import
java.io.FileInputStream; - import
java.io.FileOutputStream; - import
java.io.ObjectInputStream; - import
java.io.ObjectOutputStream; - import
java.io.Serializable; -
- public
class Box implements Serializable { -
-
private static final long serialVersionUID = 1L; -
private int width; -
private int height; -
private String name; -
-
public static void main(String[] args) { -
-
try { -
Box myBox = new Box(); -
myBox.setWidth(50); -
myBox.setHeight(30); -
myBox.setName("芒果"); -
-
FileOutputStream fs = new FileOutputStream("serializableObject.txt"); -
ObjectOutputStream os = new ObjectOutputStream(fs); -
os.writeObject(myBox); -
os.close(); -
fs.close(); -
} catch (Exception ex) { -
ex.printStackTrace(); -
} -
-
try { -
FileInputStream fis = new FileInputStream("serializableObject.txt"); -
ObjectInputStream ois = new ObjectInputStream(fis); -
Box box = (Box) ois.readObject(); -
System.out.println(box.getWidth()); -
System.out.println(box.getHeight()); -
System.out.println(box.getName()); -
ois.close(); -
fis.close(); -
} catch (Exception e) { -
e.printStackTrace(); -
} -
} -
-
public void setHeight(int height) { -
this.height = height; -
} -
-
public int getHeight() { -
return height; -
} -
-
public void setWidth(int width) { -
this.width = width; -
} -
-
public int getWidth() { -
return width; -
} -
-
public void setName(String name) { -
this.name = name; -
} -
-
public String getName() { -
return name; -
} -
- }
读取对象的顺序与写入时的顺序要一致。
6、相关注意事项
- Java对象序列化
- Java对象序列化
- Java对象序列化
- Java对象序列化
- java对象序列化
- Java 对象序列化
- Java 对象序列化
- Java对象序列化
- Java对象序列化
- java对象序列化
- Java 对象序列化
- java对象序列化
- Java-对象序列化
- java对象序列化
- JAVA对象序列化
- java对象序列化
- Java对象序列化
- Java 对象序列化
- 谈谈activiti个人理解及基础Demo环境搭建
- Spring MVC的Controller统一异常处理:HandlerExceptionResolver
- ELO等级分制度
- IIS 中站点浏览报错的解决方法
- Windows 64位下装Oracle 11g 64位,PLSQL(Database为空)
- java对象序列化
- Run Jekyll on Windows Part 1
- iOS_电池状态
- Gson利用泛型将Http请求返回的Json字符串快速解析模板
- HDU5410-CRB and His Birthday
- (1)uboot详解——板子刚上电时都干了些什么
- linux系统下的vi编辑器一些常用命令整理
- 游标嵌套
- Programming assignment 3: Optimization and generalization 解答