`

Java中serializable序列化

    博客分类:
  • Java
阅读更多
1. 序列化

transient不会被序列化。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class SerializableTest1{
    public static void main(String[] args) throws Exception{
        Person p1 = new Person(20, "zhangsan", 4.55);
        Person p2 = new Person(50, "lisi", 4.67);
        Person p3 = new Person(10, "wangwu", 17.78);
        FileOutputStream fos = new FileOutputStream("person.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(p1);
        oos.writeObject(p2);
        oos.writeObject(p3);
        oos.close();
        System.out.println("--------------------");
        FileInputStream fis = new FileInputStream("person.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);

        Person p = null;
        for (int i = 0; i < 3; i++){
            p = (Person) ois.readObject();
            System.out.println(p.age + "," + p.name + "," + p.height);
        }
        ois.close();
    }
}
class Person implements Serializable{
    int age;
    String name;
    double height;
    public Person(int age, String name, double height){
        this.age = age;
        this.name = name;
        this.height = height;
    }
}


2. 反序列化

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class SerializableTest2 {
    public static void main(String[] args) throws Exception {
        Person2 p1 = new Person2(20, "zhangsan", 4.55);
        Person2 p2 = new Person2(50, "lisi", 4.67);
        Person2 p3 = new Person2(10, "wangwu", 17.78);
        FileOutputStream fos = new FileOutputStream("Person2.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(p1);
        oos.writeObject(p2);
        oos.writeObject(p3);
        oos.close();
        System.out.println("--------------------");
        FileInputStream fis = new FileInputStream("Person2.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Person2 p = null;
        for (int i = 0; i < 3; i++){
            p = (Person2) ois.readObject();
            System.out.println(p.age + "," + p.name + "," + p.height);
        }
        ois.close();
    }
}
class Person2 implements Serializable{
    int age;
    String name;
    double height;
    public Person2(int age, String name, double height){
        this.age = age;
        this.name = name;
        this.height = height;
    }
    private void writeObject(java.io.ObjectOutputStream out) throws IOException{
        out.writeInt(age);
        out.writeUTF(name);
        System.out.println("write object");
    }
    private void readObject(java.io.ObjectInputStream in) throws IOException,ClassNotFoundException{
        age = in.readInt();
        name = in.readUTF();
        System.out.println("read object");
    }
}



3. 方法总结

当我们在一个待序列化/反序列化的类中实现了以上两个private方法(方法声明要与上面的保持完全的一致),那么就允许我们以更加底层、更加细粒度的方式控制序列化/反序列化的过程。
private void writeObject(java.io.ObjectOutputStream out) throws IOException{
    out.writeInt(age);
    out.writeUTF(name);
    System.out.println("write object");
}
private void readObject(java.io.ObjectInputStream in) throws IOException,ClassNotFoundException{
    age = in.readInt();
    name = in.readUTF();
    System.out.println("read object");
}
分享到:
评论

相关推荐

    java serializable 序列化与反序列化

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

    Java_Serializable(序列化)的理解和总结

    在Java中,如果一个类实现了`Serializable`接口,那么该类的对象就可以被序列化。序列化的目的是为了能够持久地保存对象的状态,或者在网络中传递对象。 序列化主要关注的是对象的状态(即其实例变量),而不是其...

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

    在Java中,通过实现`Serializable`接口,可以方便地进行对象的序列化操作。序列化的核心在于能够将对象的状态转换为可以存储或传输的形式,从而实现对象的持久化和远程通信等功能。 #### 二、序列化的应用场景 ...

    java.io.Serializable序列化问题

    #### 六、序列化中的注意事项 - **`transient` 关键字**:使用 `transient` 可以排除某些字段不被序列化。 - **版本兼容性**:序列化的类应该定义一个 `serialVersionUID` 来确保版本兼容性。 - **私有构造函数**:...

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

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

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

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

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

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

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

    而在Java中,我们可以通过实现`Serializable`接口来使类支持序列化,或者使用`java.io.ObjectOutputStream`和`java.io.ObjectInputStream`进行对象的序列化和反序列化。 接下来,我们讨论反序列化。反序列化是序列...

    析Android中的Serializable序列化.rar_Serializable _android

    本文将深入探讨Android中的Serializable序列化机制,包括其原理、使用场景以及注意事项。 一、Serializable接口概述 Serializable接口是Java提供的一种序列化机制,它允许对象的状态被转换成字节流,以便于存储或者...

    java中的序列化与反序列化

    Java中的序列化与反序列化是Java编程语言中用于处理对象状态持久化和网络传输的重要技术。序列化是指将一个Java对象转换为字节流的过程,这样就可以将对象的状态保存到磁盘上或者通过网络传输。反序列化则是将字节流...

    Serializable序列化

    **Serializable序列化** 在Java编程语言中,`Serializable`接口是一个非常重要的概念,它涉及到对象的状态持久化和网络传输。序列化是将一个对象转换为字节流的过程,这样就可以将其保存到磁盘、数据库或者在网络中...

    Java实验7 序列化.doc

    在Java中,序列化是通过实现`Serializable`接口来完成的。然而,Java的标准序列化机制并不支持直接将对象序列化为XML格式,而是默认生成二进制格式的数据。在实验7中,我们看到了如何使用第三方库XStream将Java对象...

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

    在Java中,实现序列化主要通过实现`Serializable`接口来完成。`Serializable`接口是一个标记接口,不包含任何方法,仅仅表示该类的对象是可序列化的。 例如,我们有一个`Student`类,它实现了`Serializable`接口: ...

    Java序列化_Java序列化结构_

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

    序列化 serializable demo

    首先,`Serializable`接口是Java中用于实现序列化的标志接口。它没有定义任何方法,但当一个类实现了这个接口,Java的ObjectOutputStream就可以将该类的对象写入到流中。例如,`MySerializable.java`和`Product.java...

    Java序列化

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

    java对象序列化和反序列化

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

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

    Java对象的序列化和反序列化是Java编程中的一项重要技术,主要应用于数据持久化、网络传输等场景。本课件详细介绍了这一概念及其在实际应用中的操作。 首先,序列化是将Java对象转化为字节序列的过程,目的是为了...

    java反序列化利用程序UI版Beta1.1.rar

    1. **Java序列化机制**:Java对象序列化是通过实现`Serializable`接口来标记一个类可被序列化。`ObjectOutputStream`用于将对象写入流,`ObjectInputStream`用于从流中读取并反序列化对象。 2. **易受攻击的库**:...

Global site tag (gtag.js) - Google Analytics