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 }
  • 相关阅读:
    POJ-2253 Frogger dijsktra查找间隔最小的路径
    LightOJ-1282 Leading and Trailing 模算数 快速幂 对数的用法
    LightOJ-1341 Aladdin and the Flying Carpet 分解质因数(注意对大素数的优化)
    UVA-10200 Prime Time 素数(注意除法精度)
    POJ-2142 The Balance 扩展欧几里德(+绝对值和最小化)
    ArchLinux 音乐播放客户端ncmpcpp和服务端mpd的配置
    [笔记-统计学习方法]感知机模型(perceptron) 原理与实现
    [Bug]Python3.x AttributeError: libtest.so: undefined symbol: fact
    [Bug]C++ XXX:undefined reference to "xxx"
    ip代理池的爬虫编写、验证和维护
  • 原文地址:https://www.cnblogs.com/linst/p/5666460.html
Copyright © 2011-2022 走看看