Java对象序列化和反序列化
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,即Java对象序列号,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象,即反序列化。
把Java对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为Java对象的过程称为对象的反序列化。
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。
一. JDK类库中的序列化API
java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。、
只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externalizable接口继承自Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以采用默认的序列化方式 。
对象序列化包括如下步骤:
1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;
2) 通过对象输出流的writeObject()方法写对象。
对象反序列化的步骤如下:
1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;
2) 通过对象输入流的readObject()方法读取对象。
下面让我们来看一个对应的例子,类的内容如下:
package com.cn;
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
public Person() {
}
public Person(String username,String password,String sex,int age) {
this.setUsername(username);
this.setPassword(password);
this.setSex(sex);
this.setAge(age);
}
private String username ;
private String password ;
private String sex ;
private int age ;
public int getAge() {
return age;
}
public vo
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来分析的文章更是鲜有所见。
本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成 JVM 字节码后, ......
前些时候,把《Thinking in Java》中异常这一章翻出来再次研读,本人有些收获,并且有些观点和作者观点不太一致,共享之
1.异常的定义
一个系统中定义异常应遵循如下几个原则:
a. 系统中如果某个模块功能比较单一,建议将所有异常放在一个package内;如果某个模块有很多子模块, ......
开发了个flex和java的测试项目,因为flex文件比较多,所以创建flex时候,
在WebRoot下建立了文件夹bin,用来存储html和swf文件
想在浏览器输入http://localhost:8080/project直接可以访问文件夹下的html
第一,在WebRoot下建立index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
&l ......