java序列化对象后读取数据错误的问题

news2024/9/20 3:41:07

今天学到了对象的序列化,就是将对象写入到文件中去,大家要直到我们普通的输入输出文件只是把数据的值写入了文件,而没有把数据的类型与之绑定,比如我向文件中写入100,那么这是字符串”100“还是整数100还是高精度浮点数呢,我们是不能确定的,将数据的类型和值一起写入文件中,这就是序列化,把序列化的数据从文件中读出来,这就是反序列化

问题

学习过程中我试了试向文件中写和读,可是在读的时候却抛出了异常,测试代码如下

        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("D:\\aaa.dat"));

        
        oos.writeObject(new Dog());
        oos.writeChar('a');
        oos.writeUTF("这是一个测试语句");
        

        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("D:\\aaa.dat"));

        System.out.println(ois.readObject());
        System.out.println(ois.readChar());
        System.out.println(ois.readUTF());

我是严格按照写进去的顺序来读的,还是提示我异常如下

 告诉我读不到目标数据,我就纳闷了,明明正常进去了怎么就读不出来呢,我去看目标文件里面也有我写入的数据啊怎么就读不到呢,试了半天找了半天bug才发现,我在写入文件之后没有关闭输入流,那么我想要写入的数据就还没有真正的进入文件

因为数据在写入时为了提高效率,通常都是把数据先放入缓冲区,等着调用输入流的close或者flush方法的时候会将缓冲区的数据真正送入文件。当然,如果忘了调用这些方法的话,一般在程序结束时系统会将数据真正写入文件中去

这就合理解释了这个问题:在写入命令执行完并且没有关闭输出流的时候数据还留在缓冲区中,并没有真的进入文件,此时我调用读命令读取数据系统则会发现文件是空的,自然就会抛出异常了。

像下面这样加上close方法后就可以正常输出了

        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("D:\\aaa.dat"));

        
        oos.writeObject(new Dog());
        oos.writeChar('a');
        oos.writeUTF("这是一个测试语句");
        
        oos.close();//关闭输出流

        ObjectInputStream ois=new ObjectInputStream(new FileInputStream("D:\\aaa.dat"));

        System.out.println(ois.readObject());
        System.out.println(ois.readChar());
        System.out.println(ois.readUTF());

输出如下

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2147766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS入门笔记

目录 概述 组成 CSS 语法 常见的使用方式 CSS 优先级 CSS 选择器 1. 基本选择器 2. 属性选择器 3. 伪类选择器 4. 组合选择器 示例 优先级 边框样式与盒子模型 单个边框 边框轮廓(Outline) 盒子模型 模型介绍 边距设置 布局示例 文…

支付宝开放平台-开发者社区——AI 日报「9 月 19 日」

1️⃣ 保守派中间派原生派,谁将主导搜索引擎未来三十年? 机器之心|阅读原文 拥有智能索引库、专属知识库、混合大模型调度系统的 AI 原生搜索,能否成为正统,引领搜索引擎的下一个三十年?AI 正成为「端掉」…

数据处理与统计分析篇-day05-Pandas详解

创建DaraFrame对象 概述 DataFrame是一个表格型的结构化数据结构,它含有一组或多组有序的列(Series),每列可以是不同的值类型(数值、字符串、布尔值等)。 DataFrame是Pandas中的最基本的数据结构对象&…

51单片机-DA(数字转模拟)

作者:Whappy 个人理解:将电压或电流信号进行等分或不等分(高电平的电压范围和低电平的范围,如0-5v,0-1.8位低电平,3.8-5v为高电平),同样也是通过采样,量化等操作将不连续…

工业仪器仪表指针数据集

工业仪器仪表指针数据集: 可用于仪表指针识别、分割项目 分别含有1000张原图和标签 图片中有各类工业仪器表盘,指针。 工业仪器仪表指针数据集介绍 数据集名称 工业仪器仪表指针数据集(Industrial Instrument Needle Dataset) 数据集概述 …

Introduction to LLMs in Python

1、The Large Language Models (LLMs) Landscape 1.1、Introducing large language models 1.1.1、LLMs development lifecycle 1.1.2、Pre-training and fine-tuning We can often use a pre-trained LLM as a foundation and fine-tune it with our specific data, saving …

【笔记】2.1 半导体三极管(BJT,Bipolar Junction Transistor)

一、结构和符号 1. 三极管结构 常用的三极管的结构有硅平面管和锗合金管两种类型。各有PNP型和NPN型两种结构。 左图是NPN型硅平面三极管,右图是PNP型锗合金三极管。 从图中可见平面型三极管是先在一块大的金属板上注入杂质使之变成N型,然后再在中间注入杂质使之变成P型,…

从零开始讲DDR(2)——DDR的核心技术

我们知道DDR区分于之前的SDRAM最大的点就在于它可以做到“在时钟周期的上升沿和下降沿都能传输数据,这样它的传输速率就比SDRAM快了一倍”。其实要做到这点,背后需要的技术突破体现在很多层面: 一、双边沿触发技术(Double Data Ra…

DPDK 简易应用开发之路 2:UDP数据包发送及实现

本机环境为 Ubuntu20.04 ,dpdk-stable-20.11.10 发送数据包的通用步骤 初始化DPDK环境: 调用 rte_eal_init() 来初始化DPDK的EAL(环境抽象层),这是所有DPDK应用程序的第一步,用于初始化硬件、内存和逻辑核…

希尔排序(ShellSort)详解

希尔排序的底层是插入排序, 不了解插入排序的友友可以先看我下面这篇文章: 插入排序详解-CSDN博客 思路 就整体而言,希尔排序不过是多用了几次插入排序, 预排序→插入排序, 预排序的作用是让数组元素更接近于有序…

FreeRtos中Task函数详解

前言:本篇笔记参考韦东山老师,B站视频链接放在最后。 Task任务基本概念 在使用FreeRtos的程序中,可以创建多个Task来完成程序功能,Task是轻量级的独立执行单元,被FreeRtos的调度器管理,每个任务有着自己的…

从零开始手搓Transformer#Datawhale组队学习Task1#

从零开始手搓Transformer 目录 缩放点积注意力DotProductAttention 多头注意力Multi-Head Attention 位置编码Position Encoder 前馈神经网络FFN 残差连接和层归一化(Add&Norm) 编码器Encoder 解码器Decoder 编码器-解码器Encoder-Decoder …

pg入门3—详解tablespaces2

pg默认的tablespace的location为空,那么如果表设置了默认的tablespace,数据实际上是存哪个目录的呢? 在 PostgreSQL 中,如果你创建了一个表并且没有显式指定表空间(tablespace),或者表空间的 location 为…

ISSTA 2024盛大开幕:中国学者的录取数和投稿量均位列第一

随着夏日的尾声,全球软件测试领域的专家和学者齐聚在奥地利维也纳。共同参与这场科技盛宴——ISSTA 2024。这场国际会议正如火如荼地进行中,吸引了来自世界各地的专业人士参与。 会议实况: 9月16日与17日,大会安排了丰富的社交活…

Qt:懒汉单例(附带单例使用和内存管理)

前言 本文主要写懒汉单例以及单例的释放,网上很多教程只有单例的创建,但是并没有告诉我们单例的内存管理,这就很头疼。 正文 以下是两种懒汉单例的写法 1. 懒汉式单例(多线程不安全,但是在单线程里面是安全的&…

【828华为云征文|华为云Flexus X实例部署指南:轻松搭建可道云KODBOX项目】

文章目录 华为云 Flexus X 实例:引领高效云服务的新时代部署【可道云KODBOX】项目准备工作具体操作指南服务器环境确认宝塔软件商店操作域名解析可道云KODBOX登录页效果验证 总结 华为云 Flexus X 实例:引领高效云服务的新时代 在云计算领域&#xff0c…

【UE5】使用2DFlipbook图作为体积纹理,实现实时绘制体积纹理【第一篇】

这是一篇对“Creating a Volumetric Ray Marcher-Shader Bits”的学习心得 文章时间很早,因此这里针对UE5对原文做出兼容性修正(为避免累赘不做出注明。链接如上,有需要自行学习) 以及最后对Custom做可能的蓝图移植,做…

虚拟机与物理机的文件共享

之前往虚拟机里传文件都是直接拖拽或者借助工具上传,都不太方便,倘若物理机的文件直接能在虚拟机里读取使用,那多好啊~ 1 虚拟机设置 注意文件夹名称不要中文/空格 2 验证Kali下分享文件夹功能是否启用 vmware-hgfsclient 3 创建挂载目录…

【踩坑】utools黑框和chrome白屏

记录一下bug,后面找到解决方案再同步 刚开机会黑框,但是输入wx能正常打开,功能一切正常 过一段时间会恢复正常 chrome会白屏 过一段时间恢复正常,大概是utools恢复正常时间的三倍 猜测是前两天关机时提示xx应用阻止关机&#…

旷视轻量化网络shufflenet算法解读

目录 预备知识 1. 回顾MobileNet V1的核心思想---深度可分离卷积 2.ShuffleNet主要有两个创新点 2.1 分组卷积与11分组卷积 2.2 channel Shuffle(通道重排) 2.3 通道重排过程 3. ShuffleNet网络结构 3.1 ShuffleNet unit 3.2 不同分组数的Shu…