序列化、反序列化(实体类或要序列化的对象类必须实现Serializable接口)

package com.phone.shuyinghengxie;

import java.io.Serializable;

/*
                 一个类的对象要想序列化成功,必须满足两个条件:
                该类必须实现 java.io.Serializable 对象。
                该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,
                    则该属性必须注明是短暂的。
                如果你想知道一个Java标准类是否是可序列化的,请查看该类的文档。
                检验一个类的实例是否能序列化十分简单, 只需要查看该类有没有
                实现java.io.Serializable接口。
 */

public class Employee implements java.io.Serializable
{
   public String name;
   public String address;
   public transient int SSN;
   public int number;
   public void mailCheck()
   {
      System.out.println("Mailing a check to " + name
                           + " " + address);
   }
}
/*
序列化对象
    ObjectOutputStream 类用来序列化一个对象,如下的SerializeDemo例子实例化了一个Employee对象,并将该对象序列化到一个文件中。
    该程序执行后,就创建了一个名为employee.ser文件。该程序没有任何输出,但是你可以通过代码研读来理解程序的作用。
    注意: 当序列化一个对象到文件时, 按照Java的标准约定是给文件一个.ser扩展名。
*/

public class SerializeDemo
{
   public static void main(String [] args)
   {
      Employee e = new Employee();
      e.name = "Reyan Ali";
      e.address = "Phokka Kuan, Ambehta Peer";
      e.SSN = 11122333;
      e.number = 101;
      try
      {
         FileOutputStream fileOut =
         new FileOutputStream("/tmp/employee.ser");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
         System.out.printf("Serialized data is saved in /tmp/employee.ser");
      }catch(IOException i)
      {
          i.printStackTrace();
      }
   }
}                
/*
反序列化对象
    下面的DeserializeDemo程序实例了反序列化,/tmp/employee.ser存储了Employee对象。
*/
public class DeserializeDemo
{
   public static void main(String [] args)
   {
      Employee e = null;
      try
      {
         FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
         ObjectInputStream in = new ObjectInputStream(fileIn);
         e = (Employee) in.readObject();
         in.close();
         fileIn.close();
      }catch(IOException i)
      {
         i.printStackTrace();
         return;
      }catch(ClassNotFoundException c)
      {
         System.out.println("Employee class not found");
         c.printStackTrace();
         return;
      }
      System.out.println("Deserialized Employee...");
      System.out.println("Name: " + e.name);
      System.out.println("Address: " + e.address);
      System.out.println("SSN: " + e.SSN);
      System.out.println("Number: " + e.number);
    }
}
时间: 2024-10-10 00:48:00

序列化、反序列化(实体类或要序列化的对象类必须实现Serializable接口)的相关文章

Java实体对象为什么要实现Serializable接口?

前言 Java实体对象为什么一定要实现Serializable接口呢?在学JavaSE的时候有些实体对象不实现Serializable不是也没什么影响吗? 最近在学习mybatis的时候发现,老师写的实体对象都实现了Serializable接口,我查了查网上说是实现Serilizable接口是为了序列化 先来看下Serializable接口 Serializable是java.io包中定义的.用于实现Java类的序列化操作而提供的一个语义级别的接口.Serializable序列化接口没有任何方法

OC类中一些细节问题(对象类存储、类中结构体的用法)

一:OC中得方法名 注意:方法名冒号和后面的and方法名冒号  都是方法名 一:对象的存储细节 类加载到代码区(包括类中得属性和方法).对象动态加载到堆内存中.指向对象的指针存放在栈区. 三:定义类常见的错误 定义类的时候,常见的错误 1)类的定义不能嵌套 2)不要漏写 @end 3) 不要忘记写实现类(如果忘记写了,编译不会报错,运行时候才报错) 4)定义成员变量的大括号经常漏写 5) 如果不写@interface 只有 @implementation 这可以,但是会报警告,建议不要这么写 6

谈谈序列化—实体bean一定要实现Serializable接口?

导读:最近在做项目的过程中,发现一个问题,就是我们最开始的时候,传递参数包括返回类型,都有map类型.但是由于map每次都要匹配key值,很麻烦.所以在之后就将参数传递和返回类型全都改成了实体bean,并且让每个bean都实现了Serializable接口.然后,在这里的时候,就有点疑惑.首先:为什么要进行序列化:其次:每个实体bean都必须实现serializabel接口吗?最后:我做一些项目的时候,没有实现序列化,同样没什么影响,然后现在做项目需要序列化,到底什么时候应该进行序列化操作呢?

JAVA SOCKET 序列化反序列化

以下是客户端序列化后将对象发送给服务端 public ResponseBean r(int b) { try { Socket socket = new Socket(Config.ServerIP,Config.ServerPort); RequestBean rb = new RequestBean(); rb.password = this.password; rb.ctrl = b; OutputStream outputStream = socket.getOutputStream()

序列化反序列化流、打印流

ObjectOutputStream(序列化流) ObjectOutputStream是序列化流,可以将Java程序中的对象写到文件中. ObjectOutputStream 构造方法: ObjectOutputStream(OutputStream out):参数要传递字节输出流. ObjectOutputStream写对象的方法(特有方法): void writeObject(Object obj): 向文件中写对象. ObjectOutputStream 的使用步骤: 创建序列化流,用来写

实体类为啥要序列化

我的理解:就像我们搬桌子,桌子太大了不能通过比较小的门,所以我们要把它拆了再运进去,这个拆桌子的过程就是序列化. 而反序列化就是等我们需要用桌子的时候再把它窦起来,这个过程就是反序列化. 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本.图片.音频.视频等, 而这些数据都会以二进制序列的形式在网络上传送. 那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的.如何做到呢?这就需要Java序列化与反序列化了. 换句话说,一方面,发送方需要把这个Java

Java连载102-对象类文件的序列化与反序列化

一.对象类文件的序列换与反序列化 1.java.io.ObjectOutputStream;序列化JAVA对象到硬盘 2.java.io.ObjectInputStream;将硬盘中的数据“反序列化”到JVM内存中 Compile编译(java->class) DeCompile反编译(class->java) 3.标识性接口的作用: JVM如果检查到该对象实现了某个标识接口,会对它进行特殊待遇 如下代码中的User102实现的接口Serializable 疑问:User102实现Serial

序列化反序列化api(入门级)

定义: java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么字符串通常也会进行序列化? 对象需要进行序列化的原因:保证对象的状态不变(比如一个studunet): 字符串通常也进行序列化的原因:为了保证解析不出意外(比如编码可能不一致)(虽然字符串不序列化一般也不会报错). 同时以下原因也是一个很重要的因素: 对象.文件.数据,有许多不同的格式,很难统一传输和保存, 序列化以后就都是字节流了,无论原来是什么东西,都能变成一样的东

writeObiect与序列化反序列化

在写仿QQ聊天工具中,客户端与服务端之间的通信一开始是采用的是InputStream和OutputStream,这导致在数据传输过程中,登录信息,注册信息等难以区分,这时我给传输的数据加了标识来分辨信息类型,今天写到了多客户端互发信息这里,发现进行不下去了,无法判断信息是来自哪里,发往哪里,去网上搜了一下发现有ObjectInputStream,ObjectOutputStream, 这个方法将存储指定对象的类.类的签名以及这个类及其超类中所有的的非静态和非瞬时的域的值. Java.io.Obj