序列化:从数据转变为对应的byte序列的过程
int a=0x7fffffff ==> [7f, ff, ff, ff]
反序列化:从byte序列转变为对应的数据的过程
基本类型序列化与反序列化:
就是将java中8种基本类型数据进行序列化与反序列化
RandomAccessFile提供了对基本类型数据的序列化于反序列化方法(基本读写操作)
raf.writeInt(0x7fffffff);
1:0x7fffffff ====> [7f,ff,ff,ff]序列化
2:[7f,ff,ff,ff] ==> raf.read 反序列化
=====================================================================================
字符串的序列化(文字编码方案)
String本质上就是char[]
将char[]转换为byte序列,字符串的编码,也叫字符串序列化
char类型16位无符号整数,值是unicode编码
UTF-16BE:
使用两个字节描述一个字符,将16位的char从中间切开.都是以2个字节
UTF-16BE是将unicode编码的char[]转换为byte序列的编码方案
例如:char[]=['A','B','中']
byte[]=[00,41,00,42,4e,2d]
UTF-16BE编码只能够支持65535个字符编码
UTF-8:(常用)
采用变长编码1-n方案,其中英文占1个字节,中文占3个字节
较为常用的:
GBK:中国的国标.支持20000+个中日韩字符,英文占1个字节,中文2个字节.
与unicode编码不兼容.需要转换
gb2312:简体中文编码
iso8859-1:西欧常用的字符编码
================================================================================
对象序列化(序列化和反序列化的对象不是同一个)
对象序列化:将每一个对象转换为byte序列,反之叫对象的反序列化
对象序列化与反序列化的流:
ObjectInputStream:用作反序列化对象的 readObject();
ObjectOutputStrem:作用对象序列化的 WriteObject(Object obj);
注意:不是所有类的对象都可以序列化,只有实现了[序列化接口]的类的对象才可以序列化
实现序列化接口的类需要定义一个常量serialVersionUID.
这个属性的值可以任意写,作用是进行版本的控制.防止反序列
化的对象与当前这个对象所属类在内容上有冲突而导致反序列化异常
序列化接口: Serializable
此接口没有任何抽象方法,这个接口是为了标示其子类可以被序列化
序列化接口没有方法或字段,仅用于标识可序列化的语义
对象的序列化与反序列化结合使用,可以实现对象的[深层复制]
对象的创建是在内存中创建的,存在于堆内存里,一旦断电对象丢失,而序列化之后,保存在文件里,可以保证对象的丢失