Day 18
03.19
字符流
字节流 以byte为最小传输单元
字符流是以字符为单位来进行传输的,char java采用16位Unicode编码来表示字符和字符串
字符流分为两种:
字符输入流:Reader
字符输出流:Writer
都是抽象类 ,
字符集:
规定了某个文字对应的二进制的存放方式(编码)和某个二进制值代表了哪个文字(解码)的转换关系
字符编码:
计算机只能存放0或者1二进制的数据,怎么样才能让他表示多种多样的数据,要对各种字符指定一个数字编码,这种编码就是编码集
计算机中常用的编码:G BK、 GB2312、 utf-8、 unicode编码
计算机中只保存字符对应 的编码,计算机只需要位置字符集清单,当读到这种编码的时候就拿去和清单进行对比找出当前字符,再显示成我们看到的字符样式。
乱码:编码和解码所用的编码格式不一样。
Writer和Reader
InputStreamReader:
转换流,将字节流转换为字符流
filereade
filewriter
Reader和Writer
怎么选择?字符流还是字节流?
针对文件传输,一般选择用字节流,比如图片、音频、视频
针对文本传输 ,一般选择字符流
用字节流传输文本内容没问题,整体传输可以传递。用字符流来操作文件可能字节丢失,文件可能打不开
对象的操作
对象的序列化:将所有的object对象转化为byte为单位内容传输到目的地(磁盘、网络空间)
反序列化:将磁盘中的数据以byte为单位读取,转化为object对象放入内存
创建对象:1、new 2、克隆 3、反序列化
序列化规范:
1、你要序列化的对象必须要实现Serializable接口,如果对象没有实现接口,序列化的时候抛出没有实现接口的异常
2、静态变量和成员方法不可序列化
3、一个类要被序列化,该类引用的对象也应该是可以被序列化的,否则整个序列化过程将失败
4、声明transient关键字,可以控制当前属性不被序列化。
1、ObjectIntputStream
2、ObjectOutputStream
默认将数据给覆盖。后面传输的数据默认将前面的数据给覆盖,需要加boolean类型 true
读对象
判断有没有内容。available
序列化对象:
反序列化对象
读对象的时候,如果有多个对象,在写对象的时候要将头部去掉4个字节