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

简介:   /* java中对象的序列化和反序列化    序列化将对象信息保存至文件等永久设备   反序列化从设备读取对象信息 在内从中根据信息重=构对象但是并不调用构造函数 序列化只保存对象的非静态成员  静态成员和方法不保存 transient 修饰的成员可以被忽略 不背保存   ...
 

/*
java中对象的序列化和反序列化    序列化将对象信息保存至文件等永久设备   反序列化从设备读取对象信息
在内从中根据信息重=构对象但是并不调用构造函数 序列化只保存对象的非静态成员  静态成员和方法不保存
transient 修饰的成员可以被忽略 不背保存  
在进行序列化和反序列化的时候必须实现   Serializable 接口   
在进行串行化的时候 会自动调用  对象的
 private void writeObject(java.io.ObjectOutputStream out)
     throws IOException
 private void readObject(java.io.ObjectInputStream in)
     throws IOException, ClassNotFoundException;
 这两个方法可以在对象中进行重写来灵活运用  是唯一可以再外部调用的私有方法


*/
import java.io.* ;
class  Test
{
 public static void main(String []args)  throws Exception
 { 
   Student s1=new Student(1,"w22");
   Student s2=new Student(2,"w3322");
   Student s3=new Student(4,"w24432");
   FileOutputStream fos=new FileOutputStream("ob.txt");
   ObjectOutputStream oos=new ObjectOutputStream(fos);
   oos.writeObject(s1) ;   //将对象写入文件输出流
   oos.writeObject(s2) ;
   oos.writeObject(s3) ;
   oos.close() ;//关闭
  
  
  
   FileInputStream fis=new FileInputStream("ob.txt");  //打开文件输入流
   ObjectInputStream bis=new ObjectInputStream(fis);  //连接输入流 
   Student tem=null;
   for(int n=0;n<3;n++)
   { 
      tem=(Student)bis.readObject()  ;
      System.out.println(tem.num+"  "+tem.name) ;  //输出从文件加载的对象的信息
   }
   bis.close();//关闭对象输入流
  
  
 }
 
}
class Student  implements   Serializable   //实现 Serializable  接口实现串行化 
{  
   int num ;
   String name ;
    Student(int num,String name)
    {
      this.num=num;
      this.name=name;
    }
     private void writeObject(java.io.ObjectOutputStream oos)   throws IOException  //序列化 会调用的函数 我们可以重写这个函数好似唯一可以被外部调用的静态函数
     {
       oos.writeInt(num) ;
       oos.writeUTF(name);
       System.out.println("Object of Class  Student is serializing!") ;//提示信息
        
      }
 
    private void readObject(java.io.ObjectInputStream ois)   throws IOException, ClassNotFoundException
    {
      this.num=ois.readInt() ;
      this.name=ois.readUTF() ;
      System.out.println("Object of Class  Student is deserializing !") ;  //输出提示信息
     
    }
 
 
}

目录
相关文章
|
8月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
1020 157
|
8月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
409 1
|
8月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
384 1
|
10月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
10月前
|
存储 人工智能 JavaScript
Java从作用域到对象高级应用​
本内容详细讲解了JavaScript中的作用域类型(函数作用域、块作用域、全局作用域)、作用域链、垃圾回收机制、闭包、变量提升、函数参数、数组方法、内置构造函数、对象高级知识、原型链、对象赋值、深浅拷贝、递归、异常处理及this指向等内容,全面覆盖JS核心概念与编程技巧。
126 0
|
12月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
467 1
|
11月前
|
存储 安全 Java
深入理解Java序列化接口及其实现机制
记住,序列化不仅仅是把对象状态保存下来那么简单,它涉及到类的版本控制、安全性和性能等多个重要方面。正确理解和实现Java序列化机制对于构建高效、安全和可维护的Java应用至关重要。
317 0
|
11月前
|
存储 Java
Java对象的内存布局
在HotSpot虚拟机中,Java对象的内存布局分为三部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头包含Mark Word、Class对象指针及数组长度;实例数据存储对象的实际字段内容;对齐填充用于确保对象大小为8字节的整数倍。
220 0
|
存储 Java
Java的对象和类的相同之处和不同之处
在 Java 中,对象和类是面向对象编程的核心。
285 19
|
存储 Java
Java编程中的对象和类
【8月更文挑战第55天】在Java的世界中,“对象”与“类”是构建一切的基础。就像乐高积木一样,类定义了形状和结构,而对象则是根据这些设计拼装出来的具体作品。本篇文章将通过一个简单的例子,展示如何从零开始创建一个类,并利用它来制作我们的第一个Java对象。准备好让你的编程之旅起飞了吗?让我们一起来探索这个神奇的过程!
162 10