假如你想保存一个对象(object),则这个对象所属类必须实现Serializable接口。
当串行化一个对象时,Java会保存对象的完整的“对象图”,即对该对象引用的其他对象,也进行串行化。当然,那些“其他对象”也要实现Serializable接口,否者抛NotSerializableException异常。
java 代码
- import java.io.*;
-
- public class A{
- public static void main(String [] args){
- Dog d = new Dog();
- Dog d2 = new Dog();
- try{
- FileOutputStream fos = new FileOutputStream("E:\\doc\\dogs.dat");
- ObjectOutputStream oos =new ObjectOutputStream(fos);
- oos.writeObject(d) ;
- oos.close();
- }catch(Exception e){
- e.printStackTrace();
- }
-
- try{
- FileInputStream fis =new FileInputStream("E:\\doc\\dogs.dat");
- ObjectInputStream ois = new ObjectInputStream(fis);
- d2 = (Dog)ois.readObject();
- ois.close();
- }catch(Exception e){
- e.printStackTrace();
- }
-
- System.out.println("name:"+d2.name+" age:"+d2.age+" shout:"+d2.shout());
-
- }
- }
-
- class Dog extends Animal implements Serializable{
- String name ="Peter";
- int age = 5;
- String shout(){
- return "Ho~Ho~";
- }
-
- }
-
- class Animal implements Serializable{
- String name = "Unknown";
- Animal(){
- System.out.println("Animal构造函数运行");
- }
- }
实现了Serialiable接口的超类,在串行化时不会运行构造函数。没有实现了Serialiable接口的超类,否则会运行其构造函数。(每当实例化一个子类对象时,父类的构造函数将先于子类的构造函数被调用。)
添加标识transient 的变量 将不会被串行化,当该变量所属对象被反串行化时,该变量变为其数据类型的默认值。(String默认值为null,int为0.)
串行化不适合静态变量,它只针对实例对象。
分享到:
相关推荐
Java提供了强大的串行化机制,允许程序员将任何实现了`Serializable`接口的对象转化为字节流,并将其写入文件或其他输出流中。反之,也可以从字节流中读取并恢复成对象。这个过程称为反串行化(Deserialization)。 ...
Java串行化是Java编程语言中的一个重要概念,用于将对象的状态转换为字节流,以便存储在磁盘上或在网络中传输。这个过程被称为对象的序列化,而将字节流恢复为对象的过程称为反序列化。在Java中,实现串行化的主要...
1. 将需要被序列化的类实现 Serializable 接口,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream 对象,接着,使用 ObjectOutputStream 对象的 writeObject(Object obj) 方法就可以将参数...
Java 序列化机制 Java 序列化是将一个对象的状态写入一个 Byte 流里,并且可以从其它...这是因为 Java 对串行化的对象进行反串行化的时候,直接从流里获取其对象数据来生成一个对象实例,而不是通过其构造函数来完成。
这是因为 Java 对串行化的对象进行反串行化的时候,直接从流里获取其对象数据来生成一个对象实例,而不是通过其构造函数来完成。 示例代码: ```java import java.io.*; public class Cat implements ...
在Java中,对象串行化允许将对象的状态保存到文件或在网络上传输。通过实现Serializable接口,一个对象就可以被序列化。例如: ```java class MyObject implements Serializable { // 类的属性和方法 } ``` 然后...
实现串行化需实现Serializable接口,并注意私有字段、transient关键字和static字段的影响。 线程是并发执行的程序执行单元。Java中,线程有新建、可运行、运行和终止四种基本状态。线程同步是解决多线程共享资源...
6. **串行化与反串行化的API**:Kryo提供了简洁易用的API,使得开发者可以轻松地将对象序列化到字节数组、输入/输出流或者文件中,并且反序列化回来。 7. **兼容性**:Kryo虽然不是Java标准的序列化机制,但它能很...
6. 全面的事务支持:包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)四种隔离级别。 7. 集成到应用服务器:可以无缝集成到诸如 Tomcat、JBoss...
23. **事务隔离级别**:包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)、串行化(Serializable)。不同级别影响并发性能和数据一致性,如MySQL的默认隔离级别是可重复...
实现串行化需要实现`Serializable`接口,注意保护敏感信息不被串行化。 6. **线程的基本概念**:线程是程序执行的最小单位,允许多任务并发执行。线程有新建、就绪、运行、阻塞和死亡等基本状态,状态之间的转换...
Java提供了`Serializable`接口用于支持对象的序列化。 ### 实战案例分析 - **解决Java程序响应慢的问题**: 当遇到Java程序响应变慢的情况时,可以通过分析CPU使用率、内存消耗情况等指标来定位问题。使用`jstack`...
实现串行化,类需要实现`Serializable`接口,该接口没有方法或字段,仅作为一个标记。需要注意的是,串行化可能会导致安全性问题,且某些类型的对象(如包含循环引用的对象)无法串行化。 #### 线程的基本概念、...
序列化,串行化 ['siәriәlaiz]'(serializable adj.)(deserialize反序列化,反串行化) Socket [java] 网络套接字['sɒkit] stack n.堆栈 [stæk] (对应 heap 堆) statement 程序语句; 语句 ['steitmәnt]' n. 陈述,...
事务的隔离级别包括读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE),不同的隔离级别可以防止脏读、不可重复读和幻读等问题。 2. 默认拦截器可以...
- **实现方式**:通过实现`Serializable`接口来使类支持串行化。 **3. 迭代器** - **定义**:迭代器是一种允许以一致的方式访问集合元素的对象。 - **特点**:当检测到集合结构被修改时,迭代器会抛出`...
12. **Serializable接口**:为了实现对象的串行化,类需要实现`Serializable`接口。 13. **数据库JDBC驱动**:Oracle的JDBC驱动程序类名为`oracle.jdbc.driver.OracleDriver`。 14. **图形用户界面(GUI)组件**:...
MySQL默认使用InnoDB存储引擎,支持四种隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ,MySQL默认级别)和串行化(SERIALIZABLE)。 11. **JVM内存模型**:包括...