blog 2019.3.19 Day18 字符流

本文详细介绍了Java中的字符流,包括字符集、字符编码、Reader和Writer的使用,如FileReader、BufferedReader以及如何在字符流和字节流间选择。此外,还探讨了对象的序列化和反序列化过程,强调了序列化接口、transient关键字和静态变量在序列化中的作用。
摘要由CSDN通过智能技术生成

字符流

遇到传输中文的时候,字符流一次只能传递可以一个字符,但是中文在系统中占了两个字节,这里就引入了字符流。字符流的出现是为了解决文件、文本内的内容。

字符流是以字符(char)为单位来进行传输的,采用16位unicode编码(仅在java中),表示字符和字符串。
字符流分为两种:
字符输入流:Reader
字符输出流:Writer
两个流的共同特点:都是抽象类,用的时候要用他们的子类来完成。

字节流是以字节为单位来传输的,在开发过程中若遇到超过1个字节(比如中文或有的符号占2个字节),只能把字符拆开来读取,不方便且易数据丢失。字符流可以一次传递2个字节,解决了很多问题。

字符集

字符集:规定了某个文字他对应的二进制的存放/转换方式(转码/编码) 和某个二进制值代表了哪个文字(解码)的转换关系

字符编码

计算机只能存放0或者1二进制的数据,怎么样才能让他表示多种多样的数据?
我们要对各种字符指定一个数字编码,这种编码就是编码集。

输入 小王----->转换成字符编码------>转换成二进制 存储

a ----- 54992(GB2312 字符编码) -------- 97(ASCII码)
用什么样的编码进行转码的 就用什么样的编码进行解码,不能乱用。
在这里插入图片描述
例:字符的转码、解码。
在这里插入图片描述
在这里插入图片描述

计算机中常用的编码:GBK 、GB2312 、utf-8 、 unicode编码。

计算机中只保存字符对应的编码,计算机只需要维持字符集清单,当读到这种编码的时候,就拿去和清单进行对比,找出当前字符,然后再显示成我们看到的字符样式。

乱码:编码和解码所用的编码格式不一样。

Reader和Writer

InputStreamReader 转换流:把字节流转换成字符流来操作

在这里插入图片描述
在这里插入图片描述

读取数据

FileReader

在这里插入图片描述

BufferedReader

在这里插入图片描述

FileWriter

在这里插入图片描述

怎么选择?字符流还是字节流?

针对文件传输,一般选用字节流。比如:图片、音频、视频
针对文本传输,一般选用字符流。因为文本里面可能涉及到中文

用字节流操作文本内容没问题,如果是整体传输,可以传递。用字符流来操作文件可能会出现字节丢失,文件打不开。

对象的操作

在这里插入图片描述

对象的序列化

对象的序列化指的是将object对象转化为byte为单位的序列内容 传输到目的地(磁盘、网络空间)

对象的反序列化

将磁盘中的数据以byte单位读取,转化为object对象放入内存。


创建对象的三种途径:1、new 2、clone(克隆) 3、反序列化


序列化的规范:
1、你要序列化必须要实现Serializable接口(序列化接口的规范,虽然里面啥都没有,但是还要有这个接口)。如果说对象没有实现接口,序列化的时候,会抛出一个没有实现接口的异常。
2、静态变量和成员方法不可序列化。
3、一个类要被序列化,那该类引用的对象也应该是可以被序列化的。否则整个序列化过程将失败
4、声明transient关键字,可以控制当前属性不被序列化。

1、ObjectInputStream
2、ObjectOutputStream

Studentbean 标准学生对象 下面的toString有啥用

在这里插入图片描述


在这里插入图片描述
通过transient关键字,把序列化的对象读出来然后,进行反序列化,发现不影响transient关键字声明的对象。

在这里插入图片描述
在这里插入图片描述

静态变量也不会被序列化。

流操作的特性是:覆盖。
后面传输的数据默认将前面的数据给覆盖了

解决方法:调用构造的时候,传递了一个boolean值 true 表示追加信息到文本,false表示覆盖(不加就是默认false)。
在这里插入图片描述

读取的时候,若要取多个值,需要循环去取
在这里插入图片描述
发现问题!

存之前进行一系列操作
1、判断是否是第一次存,是的话把头信息存进去
在这里插入图片描述

第一次赋值,就只有一个 不需要加true

在这里插入图片描述
定义一个下标
在这里插入图片描述

以后加创建对象的时候需要加true 因为已经有一个了,不加true会覆盖。
在这里插入图片描述
每次在写内容到文件的时候,都会创建一个StringHeader 默认的头信息, 有四个字节,所以要减去
在这里插入图片描述

在这里插入图片描述

第一次存默认存头信息,第二次存不要存这个头信息了。 系统会默认都是同一个类,所以只能存一个。
写数据完毕。

读。
在这里插入图片描述

现在就可以找到两个学生对象了

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值