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

2018-10-01 23:21:00
admin
原创 1925
摘要:Java序列化 bean处理 资源销毁 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保持一致;


二、bean处理

1、org.apache.commons.beanutils.PropertyUtils用于bean处理

2、PropertyUtils.getSimpleProperty(bean,name),获取对象成员,通过public getter

3、PropertyUtils.setSimpleProperty(bean,name,value),设置对象成员,通过public setter

4、PropertyUtils.getIndexedProperty(bean,name,index),获取数组或List的元素;

5、PropertyUtils.setIndexedProperty(bean,name,index,value),设置数组或List的元素;

6、PropertyUtils.getMappedProperty(bean,name,key),获取Map的元素;

7、PropertyUtils.setMappedProperty(bean,name,key,value),设置Map的元素;

8、操作List:getList().get(idx),getList().set(idx,value),提供获取List的方法;

9、操作List:getList(idx),setList(idx,value),提供操作具体元素的方法;

10、操作List:如果同时提供两种方法,优先调用操作具体元素的方法;


高级操作:

1、官方文档:https://commons.apache.org/proper/commons-beanutils

2、PropertyUtils.getNestedProperty(bean,name),获取成员的成员,使用点符号;

3、PropertyUtils.setNestedProperty(bean,name,value),设置成员的成员,使用点符号;

4、PropertyUtils.getProperty(bean,name),获取任意成员,支持多层嵌套;

5、PropertyUtils.setProperty(bean,name,value)),设置任意成员,支持多层嵌套;


三、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、findFirst取第一个元素,findAny取任意一个元素,anyMatch任意一个元素满足条件则返回true;

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

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

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

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


并行流:

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

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

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

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