`

java序列化和反序列化复习

 
阅读更多

序列化 反序列化:

{

序列化为一般二进制文件:

 

需要序列化的类实现serializable

 

用ObjectOutputStream输出 writeObject()

用ObjectInputStream读入 用readObject()来读出对象

代码:

package org.cc.serialization;

import java.io.Serializable;
import java.util.Date;

public class Person implements Serializable{

	public Person(String name, int age, Date birth, String sex) {
		super();
		this.name = name;
		this.age = age;
		this.birth = birth;
		this.sex = sex;
	}

	private static final long serialVersionUID = 2222L;
	
	private String name;
	private int age;
	private Date birth;
	private String sex;
	

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Date getBirth() {
		return birth;
	}

	public void setBirth(Date birth) {
		this.birth = birth;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
 
}



// 输出
import ....;

public class WritePerson {
	public static void main(String[] args) throws Exception{
		File file=new File("src/person.bin");
		FileOutputStream fos=new FileOutputStream(file);
		ObjectOutputStream oos=new ObjectOutputStream(fos);
		
		
		Person person=new Person("cc",13,new Date(),"男");
		oos.writeObject(person);
		
		Person person2=new Person("xx",12,new Date(),"女");
		oos.writeObject(person2);
		
		oos.flush();
		oos.close();
		System.out.println("写入成功");
	}
}


//读入

import ...;

public class ReadPerson {
	public static void main(String[] args) throws Exception{
		File file=new File("src/person.bin");
		FileInputStream fis=new FileInputStream(file);
		ObjectInputStream ois=new ObjectInputStream(fis);
		
		Person p1=(Person)ois.readObject();
		Person p2=(Person)ois.readObject();
		ois.close();
		
		System.out.println(p1.getName()+"  "+p2.getName());
	}
}

 

 

 

 

序列化为XML文件:

XMLEncoder

XMLDecoder

 

 额外的工具:

   xstream 以及依赖包

 

步骤:

  需要序列化的类实现serializable

  xstream.toXML() 写入

  xstream.fromXML()     读出

输出中文乱码的话 可以用:OutputStreamWriter fw=new OutputStreamWriter(new FileOutputStream(file),"UTF-8");

 

// 序列化的类和以上例子一样


import .....
import com.thoughtworks.xstream.XStream;

//写入到xml
public class WritePersonWithXML {
	public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {
		
		File file=new File("src/person.xml");
		OutputStreamWriter fw=new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
		
		XStream xs=new XStream();
		xs.alias("person", Person.class);
		xs.aliasField("birthday", Person.class, "birth");
		xs.useAttributeFor(Person.class, "name");
		xs.aliasAttribute("姓名", "name");
//		System.out.println(xs.toXML(new Person("cc2",15,new Date(),"男")));
		xs.toXML(new Person("cc2",15,new Date(),"男"),fw);
	}

}


import ...
import com.thoughtworks.xstream.XStream;

// 从xml中读出
public class ReadPersonWithXML {
	public static void main(String[] args) throws FileNotFoundException {
		
		File file=new File("src/person.xml");
		FileInputStream fis=new FileInputStream(file);
		XStream xs=new XStream();
		xs.alias("person", Person.class);
		xs.aliasField("birthday", Person.class, "birth");
		xs.useAttributeFor(Person.class, "name");
		xs.aliasAttribute("姓名", "name");
		Person p=(Person)xs.fromXML(fis);
		System.out.println(p.getAge());
	}

}

 

 

  序列化控制:

  实现Externalizable接口

   覆写writeExternal

       readExternal

   在序列化和反序列化时会自动调用以上的方法

   把需要序列化的字段手工 out输出(不需要序列化的 不需要此方法输出)   

  这个就不演示了

}

分享到:
评论

相关推荐

    java面试复习资料.pdf

    7. **Java序列化**:序列化是将对象的状态转换为字节流的过程,便于存储和传输。通过实现`Serializable`接口可实现序列化。例如: ```java class MyClass implements Serializable { // class fields } ``` 然后...

    JAVA 复习资料

    本篇内容将围绕`Person.java`与`StaticDemo05.java`两个类展开讨论,涉及面向对象编程的基本原则、文件I/O操作以及数据序列化等重要知识点。 #### 二、面向对象编程(OOP)基础 1. **类与对象** - `Person`类定义...

    Java工程师面试复习指南

    序列化和反序列化 继承封装多态的实现原理 集合类 Java集合类总结 Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解:Queue和LinkedList Java集合详解:迭代器,快速失败机制与比较器...

    Java复习试题集带答案

    6. **I/O流**:字节流与字符流的区别,缓冲流的使用,对象序列化与反序列化,文件操作,以及NIO(New IO)和NIO.2(Java 7引入的非阻塞I/O)的相关知识。 7. **异常处理**:异常的分类(检查型异常与运行时异常),...

    java面试复习资料

    5. **反序列化**:在网络传输过程中,通过反序列化的方式创建对象实例。 #### 六、序列化与反序列化 - **概念**:序列化是将对象的状态信息转换为可以存储或传输的形式的过程;反序列化则是在另一端将获取到的信息...

    Java SE 复习资料

    虽然不常用,但在某些场合(如插件系统、序列化、动态代理)是必不可少的。 9. **泛型**:泛型是Java 5引入的新特性,用于增强类型安全,减少类型转换,并允许编译器进行更严格的检查。理解和运用泛型,可以编写出...

    Java复习资料

    - 对象序列化与反序列化 8. **第八章:多线程** - 线程的创建方式:继承Thread类与实现Runnable接口 - 线程同步:synchronized关键字,wait(),notify(),notifyAll() - 线程池与ExecutorService 9. **第九章...

    java考试复习

    - 输入/输出流的概念,如字节流和字符流,以及缓冲流、对象序列化和反序列化。 8. **多线程**: - 创建和管理线程,了解Thread类和Runnable接口。 - 线程同步机制,如synchronized关键字、wait()、notify()和...

    JAVA试题 JAVA复习题 JAVA复习笔记

    - **对象序列化与反序列化**:了解Serializable接口,实现对象的持久化。 - **NIO**:非阻塞I/O模型,适用于高并发场景。 6. **多线程** - **线程的创建与状态**:通过Thread类和Runnable接口创建线程,理解线程...

    JAVA课程总复习

    8. **反射**:探讨如何在运行时动态获取类的信息并操作类的对象,以及其在插件化、序列化和动态代理中的应用。 9. **泛型**:讲解泛型的引入、使用规则,以及泛型通配符和边界。 10. **网络编程**:涉及Socket编程,...

    Java工程师必备面试题【多线程、反射、类加载器、JVM、泛型、异常处理、注解、面向对象编程、集合、IO流、序列化】

    内容概要:以上列出的Java面试题涵盖了Java语言的基础知识、面向对象编程、集合、IO流、多线程、反射、类加载器、JVM、序列化、泛型、异常处理、注解等多个方面。 适用人群:以上Java面试题适用于准备Java开发...

    Java编程复习代码

    还可能探讨了对象序列化与反序列化,以及文件操作和文件夹管理。 3. **多线程(Thread)**:Java提供内置支持进行并发编程,复习内容可能包括线程的创建(通过继承`Thread`类或实现`Runnable`接口)、线程同步(如`...

    JAVA面试重点复习内容

    - 理解对象序列化和反序列化。 9. **反射** - 什么是反射,如何通过反射获取类信息、创建对象、调用方法。 - 动态代理的理解和使用。 10. **设计模式** - 常见的设计模式如单例模式、工厂模式、装饰者模式、...

    java复习提纲 短小精悍

    7. 对象流:ObjectInputStream和ObjectOutputStream支持对象的序列化和反序列化。 二、多线程 1. 线程概念:线程是程序执行的最小单元,一个进程可以包含多个线程。 2. 创建线程:通过继承Thread类或实现Runnable...

    java复习Java程序设计

    最后,第12章“输入和输出流处理.ppt”可能详细阐述了Java的I/O流系统,包括文件操作、网络通信以及数据序列化,这是进行数据交换和持久化存储的基础。 通过这些复习资料,学习者可以全面复习Java编程的各个方面,...

    java复习笔记

    它在插件系统、序列化、动态代理等领域有广泛应用。 十、Java虚拟机(JVM) JVM是Java程序的运行环境,负责加载类、执行字节码、垃圾回收等。了解JVM的工作原理和调优技巧,对于提升程序性能至关重要。 这份"java...

    Java复习笔记

    对象流`ObjectInputStream`和`ObjectOutputStream`用于序列化和反序列化对象,序列化需要实现`Serializable`接口,`Transient`关键字标记不想被序列化的成员变量,`Externalizable`接口允许自定义序列化过程。...

    java程序语言设计第十版复习题答案

    复习题可能涵盖文件操作、缓冲流、对象序列化、网络流等知识。 7. **多线程**:Java提供内置支持进行并发编程,复习题可能涉及Thread类的使用、同步机制(synchronized关键字、wait()、notify()、notifyAll()方法)...

    java语言程序设计 进阶版 第十版 复习题答案

    7. **反射机制**:Java的反射API允许在运行时动态获取类的信息并操作对象,这在某些高级功能如插件系统、序列化和元数据处理中非常有用。复习题可能会考察如何通过反射创建对象,访问私有成员,以及调用方法。 8. *...

    607.605.JAVA基础教程_IO流与网络编程-复习:IO流概述(607).rar

    5. 对象流:ObjectInputStream和ObjectOutputStream允许我们序列化和反序列化Java对象,实现对象的持久化存储或网络传输。 6. 复用流:PipedReader和PipedWriter用于在不同线程间传递数据,构建管道。Socket和...

Global site tag (gtag.js) - Google Analytics