Java序列化 资源销毁 Stream使用介绍

2022-10-01 23:21:00
admin
原创 1085
摘要:Java序列化 资源销毁 Stream使用介绍

一、Java序列化

Serializable序列化:

1、serialVersionUID标识类的版本,序列化时写入文件,反序列化时读取进行检查;

2、serialVersionUID默认使用包名、类名、方法名、字段名、修饰符根据规则生成;

3、建议显示指定serialVersionUID,因为默认serialVersionUID可能有兼容性问题;

4、Serializable实现类要求所有字段都能够序列化,除非字段标识为transient;

5、Serializable实现类的父类如果不标识序列化,则父类成员不会参与序列化;

6、反序列化通过反射实现,序列化类构造函数不会被调用,不序列化的父类构造函数会被调用;

7、private void writeObject(ObjectOutputStream out)序列化重载函数,按需进行重载;

8、private void readObject(ObjectInputStream in),反序列化重载函数,按需进行重载

9、private Object readResolve(),生成对象重载函数,readObject之后调用,按需进行重载


Externalizable序列化:

1、Externalizable需要调用序列化类无参构造函数生成对象;

2、void writeExternal(ObjectOutput out),用于序列化成员变量,必须实现;

3、void readExternal(ObjectInput in),用于反序列化成员变量,必须实现;

4、private Object readResolve(),Serializable保持一致;


二、Java资源销毁

1、finalize是Object的方法,用于进行资源释放,子类需要重写该方法,对象被回收时会被虚拟机调用;

2、System.gc建议虚拟机进行垃圾回收,System.runFinalization建议虚拟机调用finalize方法;

3、runFinalization实际依赖gc,所以感觉runFinalization没啥用处;


三、Stream使用介绍

1、流接口包含Stream、IntStream、LongStream、DoubleStream,都继承于BaseStream;

2、BaseStream包含方法iterator(),可以用来迭代流包含的数据,只能使用一次;

3、流接口可以生成数据,比如方法generate、iterate、range、rangeClosed;

4、集合通过自己的stream方法生成流,数组通过Stream的of方法生成流;

5、filter对数据进行过滤,map对数据进行映射,flatMap将二维流转换成一维流;

6、limit取前n个元素,skip跳过前n个元素,sort对数据进行排序,distinct对数据进行去重;

7、forEach处理流数据,并行流无法保证执行顺序,forEachOrdered处理流数据并行流可以保证执行顺序;

8、collect(collector),数据转存到集合里面,常用Collectors.toList();

9、reduce(accumulator),聚合操作,accumulator满足交换律

10、reduce(identity,accumulator),聚合操作,accumulator满足交换律,accumulator.apply(identity,x)==x;


并行流:

1、sequential方法生成串行流,parallel方法生成并行流,集合的parallelStream方法生成并行流;

2、BaseStream包含方法spliterator(),返回对象Spliterator,其中trySplit用来拆分流;

3、Spliterator的tryAdvance用来迭代流数据,estimateSize表示流的剩余数据量

发表评论
评论通过审核之后才会显示。