IO流第37天(ObjectInputStream反序列化,标准输入输出流)

ObjectInputStream反序列化(此处遇到问题,已解决)

案例:使用ObjectInputStream将date反序列化

public static void main(String[] args) throws IOException, ClassNotFoundException {
        //创建反序列化的文件
        String filePath = "d:\\date.dat";
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream(filePath));
        //读取(反序列化)的顺序需要和保存数据(反序列化)的顺序一致
        System.out.println(ois.readInt());
        System.out.println(ois.readBoolean());
        System.out.println(ois.readChar());
        System.out.println(ois.readDouble());
        System.out.println(ois.readUTF());
//        Object dog=ois.readObject();
//        System.out.println(dog);

        ois.close();
    }

错误:序列化和反序列化的结果不一致(该错误是由于反序列化的读取方式不一样导致)
image

注意:
1,如果想要调用Dog的方法,就需要向下转型
2,需要将Dog的定义放到可以引用的位置

对象处理流使用细节

  1. 读取顺序要一致
    image
    image
  2. 要求实现序列化和反序列化的对象要实现Serializable接口
    image
  3. 序列化的类中建议添加SerialVersionUID
  4. 序列化对象时,默认将里面所有的属性都进行序列化,但是除了static和transient修饰的成员(不会报错,但是也不会被序列化和反序列化)
  5. 序列化对象时,要求里面属性的类型也需要实现序列化接口
  6. 序列化具有可继承性,如果某类实现了序列化接口,那么它的子类也默认实现了序列化接口

标准输入输出流

类型 默认设备
System.in标准输入 InputStream 键盘
System.out标准输出 PrintStream 显示器
System.in:编译类型:InputStream,运行类型:BufferedInputStream
System.out:编译类型和运行类型都是PrintStream
//System类的 public static final InputStream in = null;
        //编译类型:InputStream
        //运行类型:BufferedInputStream
        System.out.println(System.in.getClass());
        //System.out类的 public static final PrintStream out = null;
        //编译类型和运行类型都是PrintStream
        System.out.println(System.out.getClass());

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入内容:");
        String str= scanner.next();
        System.out.println(str);
posted @   不再犹豫27  阅读(34)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示