`

Java序列化与反序列化(Serializable)

阅读更多

Java序列化与反序列化(Serializable)

特别注意:

1.要序列化的类必须实现Serializable借口

2.在反序列化(读取对象)的时候必须额外捕获EOFException

3.序列化之后的文件是“乱码”

 

 

package com.frank.io;

import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
/**  
 * author:pengyan   
 * date:Jun 15, 2011   
 * file:ObjectInputOutputStreamTest.java  
 */ 

public class ObjectInputOutputStreamTest {
	String path="E:\\planda.p";
	public static void main(String[] args) throws Exception {
		ObjectInputOutputStreamTest test=new ObjectInputOutputStreamTest();
		test.outputObject();
		test.inputObject();
	}
	private void inputObject() throws Exception {
		//create inputObjectStream
		ObjectInputStream ois=new ObjectInputStream(new FileInputStream(path));
		// temp object to receive the value of this stream read everytime
		Object obj=null;
		PandaEntity p=null;
		try {
			while((obj=ois.readObject())!=null){
				p=(PandaEntity)obj;
				//show the object read by the stream
				System.out.println(p.toString());
			}
		} catch (EOFException e) {
			//throw EOFException when read end
			System.err.println("读取完毕");
		}
	}
	private void outputObject() throws Exception{
		//create two object to output
		PandaEntity p1=new PandaEntity(1000,"团团",3);
		PandaEntity p2=new PandaEntity(2000,"圆圆",3);
		//create the output stream
		ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(path));
		//write object
		oos.writeObject(p1);
		oos.writeObject(p2);
		//flush the stream
		oos.flush();
		//close the stream
		oos.close();
	}
}
class PandaEntity implements Serializable{
	/*the class must implements Serializable interface
	 * or there will throw java.io.NotSerializableException 
	 * */
	private Integer id;
	private String name;
	private Integer age;
	@Override
	public String toString() {
		return "id:"+id+"\tname:"+name+"\tage:"+age;
	}
	public PandaEntity() {
	}
	public PandaEntity(Integer id, String name, Integer age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
}

 

2
1
分享到:
评论

相关推荐

    java serializable 序列化与反序列化

    Java的序列化与反序列化是Java开发中的一项重要技术,它允许我们将对象的状态转换为字节流,以便存储或在网络上传输。`Serializable`接口是Java提供的一个标记接口,用于实现对象的序列化。当一个类实现了这个接口,...

    java序列化(Serializable)的作用和反序列化.doc

    ### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化的概念 序列化是指将程序中的对象转换为一系列字节流的过程,主要用于保存对象的状态或在网络之间传输对象。序列化的主要目的是为了能够持久化...

    java序列化(Serializable)的作用和反序列化

    ### Java序列化(Serializable)的作用与反序列化详解 #### 一、序列化是什么? 序列化是指将程序中的对象转换为字节流的过程,从而方便存储或传输这些对象。通常,序列化用于将对象的状态(即其实例变量的值,而非...

    java序列化和反序列化的方法

    在 Java 中,序列化和反序列化是通过实现 Serializable 接口来实现的。Serializable 接口是一个标记接口,不包含任何方法,但它告诉 Java虚拟机(JVM)该类可以被序列化。 在上面的代码中,我们可以看到 ...

    java 对象的序列化与反序列化

    Java对象的序列化和反序列化是Java编程中一项重要的技术,主要用于将对象的状态转换为字节流,以便存储或在网络上传输。这一过程对于理解Java的IO操作、持久化数据以及实现分布式通信等场景非常关键。 首先,我们来...

    java序列化和反序列化

    ### Java序列化与反序列化详解 #### 一、Java序列化概述 Java序列化(Serialization)是一项重要的功能,它可以将对象的状态转化为一系列字节,从而实现对象的持久化存储或在网络上传输。序列化机制使得Java对象...

    C#和Java的序列化反序列化

    本篇文章将深入探讨C#和Java中的序列化与反序列化机制。 首先,我们要了解什么是序列化。序列化是指将对象的状态转化为可存储或可传输的数据格式的过程。这个过程通常将内存中的对象转换成字节流,以便保存到磁盘、...

    java序列化与反序列化

    序列化也可能带来安全风险,因为任何实现了Serializable接口的对象都可以被序列化,然后在不受信任的环境中反序列化。这种攻击称为“反序列化漏洞”,可能导致代码执行。因此,谨慎处理反序列化的对象,避免来自不可...

    java对象序列化和反序列化

    Java对象序列化与反序列化是Java编程中重要的概念,主要应用于数据持久化、网络传输以及存储等场景。本文将详细解析这两个概念及其在实际应用中的实现方式。 **一、Java对象序列化** 1. **定义**: Java对象序列化...

    Java序列化_Java序列化结构_

    Java中的序列化主要通过实现`java.io.Serializable`接口来完成。虽然这个接口没有任何方法,但是它的存在就表明该类的对象可以被序列化。当一个对象被序列化时,其所有字段(包括私有的)都会被包含在字节流中,除非...

    Java中的序列化与反序列化.pdf

    总结来说,Java中的序列化和反序列化是通过`Serializable`接口和`Externalizable`接口来实现的。`Serializable`接口是默认的序列化方式,适用于大多数简单情况;而`Externalizable`接口则提供了自定义序列化行为的...

    Java序列化

    - Java允许使用 `writeObject()` 和 `readObject()` 方法来自定义序列化和反序列化的行为,这两个方法需要在类中声明为`private`,并由`java.io.Serializable` 接口的实现类提供。 7. **序列化安全性** - 序列化...

    java 常用序列化和反序列化框架使用demo

    FST提供了与Java序列化API兼容的接口,使得替换原有序列化方式变得容易。 ```java import net.sf.fst.FSTObjectInput; import net.sf.fst.FSTObjectOutput; // 序列化 FSTObjectOutput out = new ...

    探索Java序列化与反序列化的奥秘:数据持久化的桥梁

    ### Java序列化与反序列化的深入解析 #### Java序列化的重要性及应用场景 Java序列化是一项核心功能,它允许程序员将对象的状态转化为字节流的形式,从而实现对象的持久化存储或者在网络之间进行传递。这对于诸如...

    Java序列化(Serializable)与反序列化__1.docx

    Java序列化(Serializable)是Java平台提供的一种持久化机制,允许将对象的状态转换为字节流,以便存储到磁盘、数据库中,或者在网络上传输。这一过程被称为对象的序列化。反之,将字节流恢复为原来的对象状态称为反...

    JAVA对象的序列化与反序列化详细PPT课件.pptx

    Java对象的序列化和反序列化...总的来说,Java对象的序列化与反序列化是Java平台中一种强大的工具,它能够帮助开发者在多种场景下有效地处理对象数据。理解并掌握这项技术,对于提升Java应用程序的性能和功能至关重要。

    序列化与反序列化

    在Java中,可以使用`java.io.Serializable`接口标记一个类为可序列化的,然后使用`ObjectOutputStream`来序列化对象,而`ObjectInputStream`则用于反序列化。 在描述的"序列化与反序列化Demo"中,我们可以推测这...

    Java序列化与反序列化

    反序列化时,必须确保类的定义与序列化时完全相同,包括类名、字段名和类型,否则可能会抛出`InvalidClassException`等异常。 除了基本的序列化,Java还提供了更高级的功能,如`transient`关键字,它可以用于标记...

    Java序列化(Serializable)与反序列化_.docx

    ### Java序列化(Serializable)与反序列化详解 #### 序列化概念与应用场景 序列化是指将程序中的对象转换为一系列字节序列的过程,主要用于保存对象的状态以便将来使用或者在网络之间传输对象。Java提供了内置的...

    Java序列化与反序列化<转>

    Java序列化与反序列化是Java编程中一个重要的概念,它允许我们将对象的状态转换为字节流,以便存储或在网络中传输。这个过程被称为序列化,而将字节流恢复为对象的过程则称为反序列化。Java提供了一个内置的机制来...

Global site tag (gtag.js) - Google Analytics