1.转换流

转换流本质还是字符流的子类

转换流的作用

1.可以按照指定的编码进行读写操作

我们使用的IO流,默认格式都是UTF-8,如果一个文件是GBK格式,在读写的时候就会乱码,此时就可以使用转换流,只需在转换流的括号里给出字符编码即可

2.将字节流转换成字符流(需要线程通信知识,今天不聊)

以后有些方法的返回值固定是字节流,如果我们想读写一些中文数据就要使用字符流,可以通过转换流将字节流转换成字符流进行中文操作

3.转换流的使用

虽然转换流是字符流的子类,但是传入的参数需要字节流,第二个参数即为我们指定的字符编码

1.转换输入流使用

和之前的读入操作一样,只不过可以指定字符编码,如果不指定则为默认UTF-8

2.转换输出流使用

4.序列化流

之前我们做了一个写学生类的案例(字符缓冲流案例),当时我们将学生类以字符串的形式写出,然后读取的时候又spilt切割,十分麻烦,但是使用序列化流可以轻松解决

构造方法

序列化流分为输出流和输入流,传入的参数是字节流

5.序列化流使用的方法

1.序列化:直接写出对象到文件中

2.反序列化:将对象从文件中读取

6.Serializable接口

当我们的对象想通过序列化流进行写出操作时,就必须实现这个接口,否则会报错

Serializable接口是标记型接口,内部没有抽象方法,不需要重写方法,主要起到标记作用(就像猪肉上会盖印章)

当我们的学生类实现类该接口后,就可以使用序列化流直接写出



....

打开对应写出的文件,发现全是乱码,但这是正常现象,只要我们在反序列化时可以读到对象就行

进行反序列化操作,可以正常读取到对象

控制台正常显示对象信息

7.序列化流的内部操作流程

1.当我们的对象实现了Serializable接口后,内部就会自动生成一个随机的序列版本号

2.我们在进行序列化操作时,写出的不但有对象的信息,还有序列版本号

3.然后,我们进行反序列化操作时,会将文件当中的版本号和类当中的版本号进行比对,如果一样就不会报错,正常运行

如果我们在类中又添加了一个新的变量,说明我们修改了这个类,但凡修改过,序列号就会重新的随机生成

此时,我们再进行读取,文件当中的版本号是原来的,而类当中的版本号是新产生的,二者对比就会报错

解决方法:手动写死序列版本号

1.可以在主方法的String里面抄

点开主方法里的String

往下翻可以找到String的序列号,复制修改我们想要的序列号即可

2.在设置里设置

点击设置,找到Editor,点击Inspections,然后再点击java,找到 Serialization issues,勾选图片中红框即可

设置好了之后,以后我们实现Serializable接口,类会有黄色警告,alt+回车即可自动生成序列号

写死序列号后,我们再修改类,就不会再报错了

8.瞬态关键字-transient

被该关键字修饰的变量不会进行序列化操作

如图,当我们使用transient修饰age后,即使age被赋值,读取到的结果也是0(说明序列化时未进行操作)



..

案例

先使用序列化流进行序列化操作

接着,进行反序列化操作,readobject没有结束标记,当读到末尾继续读取会抛出异常

此时,有两种解决方案

1.try catch捕获

2.使用集合装入学生对象

将学生对象全部装入集合,写出时只写集合,读取时也就只要读取一次

读取时,我们要进行向下转型,否则无法调用集合里特有的方法

IO流-转换流、序列化流--java进阶day14的更多相关文章

  1. Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)

    1.操作基本数据类型的流     1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...

  2. IO(Properties、序列化流、打印流、CommonsIO)

    第1章 Properties类 1.1 Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字 ...

  3. IO—》Properties类&序列化流与反序列化流

    Properties类 介绍:Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. Properties类特点: ...

  4. File类与常用IO流第十章——序列化流

    第十章.序列化流 序列化流和反序列化流概述 序列化:用一个字节序列表示一个对象,该字节序列包含该对象的数据.对象的类型和对象中存储的属性等等信息.字节序列写出到文件后,相当于文件中持久保存了一个对象的 ...

  5. EasyRTMP实现将RTSP流转换成RTMP流实现RTSP直播转RTMP直播的功能

    本文转自EasyDarwin开源团队Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52951311 EasyRTMP EasyRTMP ...

  6. java ->IO流_序列化流与反序列化流

    序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流(对象 ...

  7. IO流的Properties集合,序列化流与反序列化流,打印流及commons-IO

    内容介绍 Properties集合 序列化流与反序列化流 打印流 commons-IO Properties类 Properties类介绍 Properties 类表示了一个持久的属性集.Proper ...

  8. IO流之序列化流与反序列化流

    序列化流与反序列化流 用于从流中读取对象的 操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流 l ...

  9. java基础(25):Properties、序列化流、打印流、commons-IO

    1. Properties类 1.1 Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符 ...

  10. java 序列化流与反序列化流

    一 对象序列化流ObjectOutputStream ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectInputStr ...

随机推荐

  1. StarUML画流程图

    一.新建流程图 1.1 新建流程图 1.2 左侧操作符介绍 Flow:顾名思义就是流,用来从一个操作流向下一个操作. Process: 过程 Terminator:用在结束的时候. Dicision: ...

  2. curl使用总结

    1.请求源码 curl http://wttr.in/ 天气网站  2.文件下载 -o :保存文件 -s:禁用进度表 --progress-bar:让进度显示为进度条 -C - :断点连续下载 --l ...

  3. 【MathType】word2016数学公式编号

    问题 毕业论文排版中,对数学公式需要类似(3-1)的格式. 解决技巧 在写论文初稿的时候,先不要于公式的编号,先给它编一个号,比如(3) (2) (4)的. 最后写完了以后,再再添加section , ...

  4. How to use the shell, terminal and the advanced tools

    How to use the shell, terminal and the advanced tools Introduction ‍ Why use English instead of Chin ...

  5. HarmonyOS_Next 星河版迁移报错记录【自用】

    Object literal must correspond to some explicitly declared class or interface (arkts-no-untyped-obj- ...

  6. 寻找可靠的长久的存储介质之旅,以及背后制作的三个网页“图片粘贴转base64”、“生成L纠错级别的QR码”、“上传文件转 base64以及粘贴 base64 转可下载文件”

    其实对于目前的形式来说,虽然像 U 盘.固态硬盘.甚至光盘这些信息储存介质(设备)的容量越来越高,但是不得不说这些设备的可靠性依然像悬着的一块石头,虽然这块石头确实牢牢的粘在天花板上,但是毕竟是粘上去 ...

  7. 面试题-MySQL和Redis(更新版)

    前言 MySQL和Redis部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,并添加了一些比较重要的问题,希望对大家起到 ...

  8. BaseMultiTableInnerInterceptor源码解读

    本文首发在我的博客:https://blog.liuzijian.com/post/mybatis-plus-source-multi-table-inner-interceptor.html 一.概 ...

  9. study Python3【4】字符串的判断

    判断类型: result为True和False str = '1122abc' str.isalnum()是数字或者字母 str = 'MDCA' str.isalpha() 是字母 str = '1 ...

  10. langchain0.3教程:聊天机器人进阶之方法调用

    我们思考一个问题:大语言模型是否能帮我们做更多的事情,比如帮我们发送邮件.默认情况下让大模型帮我们发送邮件,大模型会这样回复我们: 可以看到,大模型无法发送邮件,它只会帮我们生成一个邮件模板,然后让我 ...