IO流-转换流、序列化流--java进阶day14
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的更多相关文章
- Java API —— IO流(数据操作流 & 内存操作流 & 打印流 & 标准输入输出流 & 随机访问流 & 合并流 & 序列化流 & Properties & NIO)
1.操作基本数据类型的流 1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出 ...
- IO(Properties、序列化流、打印流、CommonsIO)
第1章 Properties类 1.1 Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字 ...
- IO—》Properties类&序列化流与反序列化流
Properties类 介绍:Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串. Properties类特点: ...
- File类与常用IO流第十章——序列化流
第十章.序列化流 序列化流和反序列化流概述 序列化:用一个字节序列表示一个对象,该字节序列包含该对象的数据.对象的类型和对象中存储的属性等等信息.字节序列写出到文件后,相当于文件中持久保存了一个对象的 ...
- EasyRTMP实现将RTSP流转换成RTMP流实现RTSP直播转RTMP直播的功能
本文转自EasyDarwin开源团队Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52951311 EasyRTMP EasyRTMP ...
- java ->IO流_序列化流与反序列化流
序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流(对象 ...
- IO流的Properties集合,序列化流与反序列化流,打印流及commons-IO
内容介绍 Properties集合 序列化流与反序列化流 打印流 commons-IO Properties类 Properties类介绍 Properties 类表示了一个持久的属性集.Proper ...
- IO流之序列化流与反序列化流
序列化流与反序列化流 用于从流中读取对象的 操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流 l ...
- java基础(25):Properties、序列化流、打印流、commons-IO
1. Properties类 1.1 Properties类介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符 ...
- java 序列化流与反序列化流
一 对象序列化流ObjectOutputStream ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectInputStr ...
随机推荐
- [TJOI/HEOI2016] 求和 题解
为什么又是佳媛姐姐啊啊啊! 斯特林数在这道题中不好处理,直接拆开: \[f(n)=\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}2^j ...
- 福尼斯焊机TPS320i/TPS400i/TPS500i的焊接特性
福尼斯焊机设备原理 TPS320i.TPS400i.TPS500i和TPS 600iMIG/MAG电源由微处理器控制,机器人驱动器维修,是完全数字化的逆变器电源. 模块化设计和系统的扩展潜力使其具有高 ...
- 解决 Docker 安装时“无法获取 dpkg 前端锁”错误的有效方法
在安装 Docker 的过程中,不少用户可能会遇到"无法获取 dpkg 前端锁"的错误提示.这是一个较为常见但也令人困扰的问题.下面为您详细介绍几种可能的解决方法: 方法一:检查并 ...
- Java中ArrayList的常见用法
Java 中的 ArrayList 是一个非常常用的动态数组,它属于 Java 集合框架的一部分.与普通数组不同,ArrayList 可以在需要时动态调整其大小.以下是 ArrayList 的一些详细 ...
- php连接sql server 2014踩坑及处理记录
1.PDOException: SQLSTATE[42S02]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]对象名 'dbotest' ...
- 【插件介绍】Mesh2Geom插件
Mesh to Geometry Plugin,来自达索官方论坛社区 原帖链接:Mesh to Geometry Plugin plugin feature: 允许Abaqus 用户从网格文件生成几何 ...
- 记线上+线下培训思想i技巧感悟
刚刚结束一场线下+线上培训 梳理一下,有几个问题: 1.虽然课件自己过了几遍,同时备注里写了一些提示 ,但是真正讲课的时候基本是没有过程特意去扫备注 注意备注应清晰,写核心关键字 2.分屏过程 需要在 ...
- 【主流技术】Spring Boot Starter 的应用场景与自动配置
目录 前言 一.Spring Boo Starter 简介 二.如何自定义 Starter 2.1命名规范 2.2整体结构 2.3模块开发 2.3.1依赖引入 2.3.2xxxAutoConfigur ...
- Qt读取Oracle中的中文乱码问题
Qt读取oracle中的中文 因为有的时候我们的oracle数据库里面的值是一个varchar2格式的,这就是一个ascii码,但是我们qt一般不是ascii码 解决方法如下 先使用utl_raw.c ...
- git 合并分支 merge
git 分支开发 git 分支开发,分支(feature)同步主干(master)代码,以及最终分支合并到主干的操作流程 由于 rebase 执行速度慢,分支同步主干代码时,分支的每次提交都可能和 ...