java代码序列化的作用_JAVA序列化方式及其作用说明阐述

Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程,如:把一个Java对象写入到磁盘或传输到网络上其他计算机中,此时需要通过Java序列化把对象转换成字节序列。

如何实现Java序列化与反序列化?

Java JDK类库中序列化API如下:

java.io.ObjectOutputStream:表示对象输出流,它的writeObject(Object obj)方法可以对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。

java.io.ObjectInputStream:表示对象输入流,它的readObject()方法源输入流中读取字节序列,再把它们反序列化成为一个对象,并将其返回。

实现序列化必须满足的要求:

实现Serializable或Externalizable接口的类的对象才能被序列化,否则抛出异常。

下面为大家举例实现Serializable,代码如下:package com.test;

import java.io.*;

/**

* 素文宅  www.yoodb.com

*/

class Yoodb implements Serializable {

private static final long serialVersionUID = 1L;

private String name;

private transient String password;

private static int count = 0;

public Yoodb(String name, String password) {

System.out.println("调用Yoodb带参的构造函数");

this.name = name;

this.password = password;

count++;

}

public String toString() {

return "计数: " + count + " 姓名: " + name + " 密码: " + password;

}

}

public class ObjectSerTest {

public static void main(String args[]) {

try {

FileOutputStream fos = new FileOutputStream("yoodb.obj");

ObjectOutputStream oos = new ObjectOutputStream(fos);

Yoodb y1 = new Yoodb("张三", "123456");

Yoodb y2 = new Yoodb("李四", "654321");

oos.writeObject(y1);

oos.writeObject(y2);

System.out.println(y1);

System.out.println(y2);

System.out.println("----------欢迎收藏本站www.yoodb.com----------------");

oos.close();

fos.close();

FileInputStream fis = new FileInputStream("yoodb.obj");

ObjectInputStream ois = new ObjectInputStream(fis);

y1 = (Yoodb) ois.readObject();

y2 = (Yoodb) ois.readObject();

System.out.println(y1);

System.out.println(y2);

ois.close();

fis.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

执行代码,输出结果如下:调用Yoodb带参的构造函数

调用Yoodb带参的构造函数

计数: 2 姓名: 张三 密码: 123456

计数: 2 姓名: 李四 密码: 654321

----------欢迎收藏本站www.yoodb.com----------------

计数: 2 姓名: 张三 密码: null

计数: 2 姓名: 李四 密码: null

读取文件流,代码如下:package com.test;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

/**

* 素文宅  www.yoodb.com

*/

public class Test{

public static void main(String args[]){

try {

FileInputStream fis = new FileInputStream("yoodb.obj");

ObjectInputStream ois = new ObjectInputStream(fis);

Yoodb y1 = (Yoodb) ois.readObject();

Yoodb y2 = (Yoodb) ois.readObject();

System.out.println(y1);

System.out.println(y2);

ois.close();

fis.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ClassNotFoundException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

}

执行代码,输出结果如下:计数: 0 姓名: 张三 密码: null

计数: 0 姓名: 李四 密码: null

注意:

Java中的序列化时transient变量和静态变量不会被序列化

1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问

2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口

3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化

总结:

1)Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程

2)使用Java序列化和反序列化可以实现数据持久化,对象数据远程通信等功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值