欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java序列化与反序列化,java序列化序列化

来源: javaer 分享于  点击 21474 次 点评:184

java序列化与反序列化,java序列化序列化


                                                                                  java序列化与反序列化   

1.什么是序列化

       Java序列化是指把Java对象转换成与平台无关的二进制流的过程,这些二进制流可以使Java对象脱离程序存在,从而可以保存在磁盘上,也可以在网络间传输;Java序列化是将一个Java对象写入IO流

     Java反序列化是指把二进制流恢复为Java对象的过程,反序列化则是从IO流中恢复一个Java对象。

2.为什么进行序列化

   1)实现远程通信,即在网络上传送对象的二进制流

       当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。换句话说,一方面,发送方需要把这个Java对象转换为二进制流,然后在网络上传送;另一方面,接收方需要从二进制流中恢复出Java对象。

  2)实现数据的持久化

     通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里)

3.如何实现序列化

   一个类的对象要被序列化,这该类就必须实现java.io.Serializable接口,其源码如下:

   

public interface Serializable {  
}  

可以发现此接口没有定义任何的方法,此接口只是一个标识接口,表示一个类具备了别序列化的能力。
 如果要完成对象的输入或输出,必须依赖对象的输入流(ObjectInputStream)和 对象输出流(ObjectOutputStream)。
      1、使用对象输出流输出序列化对象的过程称之为序列化。
      2、使用对象输入流读入对象的过程称之为反序列化。


首先来 看一下ObjectOutPutStream和ObjectInputStream的构造函数和常用方法:

         public ObjectOutputStream(OutputStream out) throws IOException :参数是输出流
         public ObjectInputStream(InputStream in) throws IOException:参数是输入流
        ObjectOutputStream.writeObject(Object):将对象序列化并写入到OutputStream中。
        ObjectInputStream.readObject():将InputStream读出对象,这里可能需要强制转换。

    **OutPutStream:首先代表这是个输出流,前面的**代表该输出流中存放的数据类型,可以是ByteArray,也可以是file,也可以是Data(代表java中的类对象)。
    **InPutStream:首先是一个输入流,前面的**代表输入流从那种类型读取数据,可以是ByteArray,代表将数据读出到字节数组中。可以是Data,表示将数据读成Java中的类对象。

     字节流包含两个顶层抽象类:InputStream和OutputStream。
        1:字节流的两个顶层类是抽象类,分别是:InputStream和OutputStream。
        2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输  出。


    

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class SerializableTest {
	
	public static void main(String args[]){
		 ObjectOutputStream oos = null;
		 try {
			oos = new ObjectOutputStream(new FileOutputStream(
					"D:\\testserialize.txt"));
			Student student = new Student("lulu",'女',18);
			oos.writeObject(student);
			
			 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\testserialize.txt"));
			 Student studentInfo = (Student)ois.readObject();
			 
			 String name = studentInfo.getName();
			 char sex = studentInfo.getSex();
			 int age = studentInfo.getAge();
			 System.out.println("name="+name+";sex="+sex+";age="+age);
			
		} catch (Exception e) {
			// TODO: handle exception
		}
	}	

}

class Student implements Serializable  
{  
 private String name;  
 private char sex;  
 private int age;
 
 public Student(String name,char sex,int age)  
 {  
  this.name = name;  
  this.sex = sex;  
  this.age = age;  
 }  
 
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public char getSex() {
	return sex;
}
public void setSex(char sex) {
	this.sex = sex;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
 
 
}  

  D盘中testserialize.txt的内容是

    


  运行结果:

   name=lulu;sex=女;age=18




      

相关文章

    暂无相关文章
相关栏目:

用户点评