zoukankan      html  css  js  c++  java
  • Serializable序列化

     对象的输入输出流

     1 package file;
     2 
     3 import java.io.File;
     4 import java.io.FileInputStream;
     5 import java.io.FileOutputStream;
     6 import java.io.IOException;
     7 import java.io.ObjectInputStream;
     8 import java.io.ObjectOutputStream;
     9 import java.io.Serializable;
    10 
    11 
    12 /*
    13     ObjectOutputStream的使用
    14 1.如果对象要写到文件上,要实现Serializable
    15  
    16 对象的输入流:ObjectOutputStream
    17 对象的输出流:ObjectInputStream
    18 
    19 2.对象的反序列化,不会调用对象的构造方法
    20 3.serialVersionID 是用于记录class文件的版本信息的,serialVerionID这个数字是通过类的类名、成员、包名、工程名算出来的一个数字。
    21 4。使用ObjectInputSteam反序列的时候,ObjectInputSteam会先读取文件中的serialVersionID,然后与本地的class文件的serialVersionID进行对比
    22 如果2个ID不一致,那反序列化失败。
    23 5.如果序列化与反序列化的时候可能会修改类的成员,那么就给类指定一个serialVersionID,然后在
    24 序列化与反序列化的时候,jvm都不会再自己算这个serialVersionID了。
    6.如果一个类维护了另外一个类,则另一个类也需要实现Serializable
    25 */ 26 class User implements Serializable{ 27 28 private static final long serialVersionUID = 1L; //指定了serialVersionUID,无论怎么修改成员都可以反序列化成功 29 String username; 30 String password; 31 transient int age; //transient透明的,不显示到硬盘上32 33 User(String username, String password) { 34 this.username = username; 35 this.password = password; 36 } 37 38 @Override 39 public String toString() { 40 // System.out.println("hah"); //加了这句,只要类的成员没有变化就成的 41 return "用户名:"+ username + "密码:" + password; 42 } 43 44 } 45 46 47 48 public class Demo10 { 49 public static void main(String[] args) throws IOException, Exception { 50 // writeObj(); 51 readObj(); 52 } 53 54 55 //把文件的信息读取出来,就称为对象的反序列化 56 public static void readObj() throws IOException, ClassNotFoundException { 57 //找到目标文件 58 File file = new File("F:\obj.txt"); 59 //建立数据的输入通道 60 FileInputStream fileInputStream = new FileInputStream(file); 61 //建立对象的输入对象 62 ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 63 //读取对象信息 64 User user = (User)objectInputStream.readObject(); //创建对象肯定要依赖对象所属的class文件 65 System.out.println("对象的信息" + user); 66 objectInputStream.close(); 67 68 } 69 70 71 72 //把对象的信息写到硬盘上,也成为对象的序列化 73 public static void writeObj() throws IOException { 74 //把user信息持久化存储。 75 User user = new User("admin", "123"); 76 //找到目标文件 77 File file= new File("F:\obj.txt"); 78 //建立数据输出对象 79 FileOutputStream fileOutputStream = new FileOutputStream(file); 80 //建立对象的输出流对象 81 ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); 82 //把对象写出 83 objectOutputStream.writeObject(user); 84 //关闭资源 85 objectOutputStream.close(); 86 } 87 }
  • 相关阅读:
    linux驱动开发学习一:创建一个字符设备
    如何高效的对有序数组去重
    找到缺失的第一个正整数
    .NET不可变集合已经正式发布
    中国人唯一不认可的成功——就是家庭的和睦,人生的平淡【转】
    自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
    ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
    自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
    ServiceStack 介绍
    一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
  • 原文地址:https://www.cnblogs.com/linst/p/5666460.html
Copyright © 2011-2022 走看看