序列化 反序列化:
{
序列化为一般二进制文件:
需要序列化的类实现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输出(不需要序列化的 不需要此方法输出)
这个就不演示了
}
相关推荐
7. **Java序列化**:序列化是将对象的状态转换为字节流的过程,便于存储和传输。通过实现`Serializable`接口可实现序列化。例如: ```java class MyClass implements Serializable { // class fields } ``` 然后...
本篇内容将围绕`Person.java`与`StaticDemo05.java`两个类展开讨论,涉及面向对象编程的基本原则、文件I/O操作以及数据序列化等重要知识点。 #### 二、面向对象编程(OOP)基础 1. **类与对象** - `Person`类定义...
序列化和反序列化 继承封装多态的实现原理 集合类 Java集合类总结 Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解:Queue和LinkedList Java集合详解:迭代器,快速失败机制与比较器...
6. **I/O流**:字节流与字符流的区别,缓冲流的使用,对象序列化与反序列化,文件操作,以及NIO(New IO)和NIO.2(Java 7引入的非阻塞I/O)的相关知识。 7. **异常处理**:异常的分类(检查型异常与运行时异常),...
5. **反序列化**:在网络传输过程中,通过反序列化的方式创建对象实例。 #### 六、序列化与反序列化 - **概念**:序列化是将对象的状态信息转换为可以存储或传输的形式的过程;反序列化则是在另一端将获取到的信息...
虽然不常用,但在某些场合(如插件系统、序列化、动态代理)是必不可少的。 9. **泛型**:泛型是Java 5引入的新特性,用于增强类型安全,减少类型转换,并允许编译器进行更严格的检查。理解和运用泛型,可以编写出...
- 对象序列化与反序列化 8. **第八章:多线程** - 线程的创建方式:继承Thread类与实现Runnable接口 - 线程同步:synchronized关键字,wait(),notify(),notifyAll() - 线程池与ExecutorService 9. **第九章...
- 输入/输出流的概念,如字节流和字符流,以及缓冲流、对象序列化和反序列化。 8. **多线程**: - 创建和管理线程,了解Thread类和Runnable接口。 - 线程同步机制,如synchronized关键字、wait()、notify()和...
- **对象序列化与反序列化**:了解Serializable接口,实现对象的持久化。 - **NIO**:非阻塞I/O模型,适用于高并发场景。 6. **多线程** - **线程的创建与状态**:通过Thread类和Runnable接口创建线程,理解线程...
8. **反射**:探讨如何在运行时动态获取类的信息并操作类的对象,以及其在插件化、序列化和动态代理中的应用。 9. **泛型**:讲解泛型的引入、使用规则,以及泛型通配符和边界。 10. **网络编程**:涉及Socket编程,...
内容概要:以上列出的Java面试题涵盖了Java语言的基础知识、面向对象编程、集合、IO流、多线程、反射、类加载器、JVM、序列化、泛型、异常处理、注解等多个方面。 适用人群:以上Java面试题适用于准备Java开发...
还可能探讨了对象序列化与反序列化,以及文件操作和文件夹管理。 3. **多线程(Thread)**:Java提供内置支持进行并发编程,复习内容可能包括线程的创建(通过继承`Thread`类或实现`Runnable`接口)、线程同步(如`...
- 理解对象序列化和反序列化。 9. **反射** - 什么是反射,如何通过反射获取类信息、创建对象、调用方法。 - 动态代理的理解和使用。 10. **设计模式** - 常见的设计模式如单例模式、工厂模式、装饰者模式、...
7. 对象流:ObjectInputStream和ObjectOutputStream支持对象的序列化和反序列化。 二、多线程 1. 线程概念:线程是程序执行的最小单元,一个进程可以包含多个线程。 2. 创建线程:通过继承Thread类或实现Runnable...
最后,第12章“输入和输出流处理.ppt”可能详细阐述了Java的I/O流系统,包括文件操作、网络通信以及数据序列化,这是进行数据交换和持久化存储的基础。 通过这些复习资料,学习者可以全面复习Java编程的各个方面,...
它在插件系统、序列化、动态代理等领域有广泛应用。 十、Java虚拟机(JVM) JVM是Java程序的运行环境,负责加载类、执行字节码、垃圾回收等。了解JVM的工作原理和调优技巧,对于提升程序性能至关重要。 这份"java...
对象流`ObjectInputStream`和`ObjectOutputStream`用于序列化和反序列化对象,序列化需要实现`Serializable`接口,`Transient`关键字标记不想被序列化的成员变量,`Externalizable`接口允许自定义序列化过程。...
复习题可能涵盖文件操作、缓冲流、对象序列化、网络流等知识。 7. **多线程**:Java提供内置支持进行并发编程,复习题可能涉及Thread类的使用、同步机制(synchronized关键字、wait()、notify()、notifyAll()方法)...
7. **反射机制**:Java的反射API允许在运行时动态获取类的信息并操作对象,这在某些高级功能如插件系统、序列化和元数据处理中非常有用。复习题可能会考察如何通过反射创建对象,访问私有成员,以及调用方法。 8. *...
5. 对象流:ObjectInputStream和ObjectOutputStream允许我们序列化和反序列化Java对象,实现对象的持久化存储或网络传输。 6. 复用流:PipedReader和PipedWriter用于在不同线程间传递数据,构建管道。Socket和...