java的序列化和反序列化Serializable原理
背景实现Serializable接口就能把对象序列化反序列化出去,那么原理是什么呢?带着以下问题一探究竟
为什么实现这个接口就能序列化和反序列化呢?
序列化和反序列化的内容是什么呢,可以自定义吗?
为什么实现这个接口就能序列化和反序列化呢
java序列化代码 123456789public static void main(String[] args) throws IOException { Object o = new Serializable() { String strValue = "这是内容"; Integer intValue = 999; }; File file = new File(System.getProperty("java.io.tmpdir"), "serializable/"); ObjectOutputStream objectOutputStream = new ObjectOutputStream( ...
mybatisPlus分析Lambda语法原理
用lambda就不用写字符串了,这个对于开发业务来说,能减少很多的错误发生。尤其是字段写错了,数据库变更字段名了,等。用法如下
1eq(FissionCoupon::getMid, mid)
他会自动转换为mid,那他的原理是什么呢?原来他接受的是一个可序列化的Function对象
123@FunctionalInterfacepublic interface SFunction<T, R> extends Function<T, R>, Serializable {}
其实用到了jdk自带的序列化。因为lambda是个特殊的实例,也是个特殊的class。在序列化的时候lambda实例中有一个writeReplace方法。
可参考jdk的序列化 Serializable原理该方法的返回值是一个lambda描述对象,java.lang.invoke.SerializedLambda 1234567891011121314public final class SerializedLambda implements Serializabl ...
枚举序列化和反序列化的代码
在java或各种框架中,[反]序列化对枚举类型默认一般都是用的枚举的名称。如果代码有魔法值,我们想改成枚举类型。但我们在改造、重构后端的时候不想对前端或者第三方有影响,可以用到此方法。
必须用到的枚举工具类
参考通用枚举 通用枚举所有的枚举想要实现(反)序列化比较要用到通用枚举,实现通用枚举的接口即可
代码(最初版本)1.可反序列化的枚举
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768/** * 可反序列化的枚举 */public enum DeserializableEnum { // DBEnum是MybatisPlus枚举的adapter,增加了getDoc的方法。MybatisPlus是直接支持数据库[反]序列化的。但是还不支持和前端的[反]序列化的交互,所以在此配置即可。 DB_Enum(DBEnum.class, DBEnum::getVal ...
mvc枚举序列化和反序列化的配置
必须用到的枚举工具类
参考通用枚举 通用枚举
使用背景spring mvc 接收或者序列化枚举类型时,
默认是根据枚举的名称(string)进行序列化或者反序列化。但是在实际开发当中,我们一般用枚举代表某一个数值,数据库存储值。
同时我们也希望和前端交互用数值交互,而不是string名称。因此用到这个工具类支持以下几个组件的反序列化和序列化
spring convert@RequestParam@PathVariable...
jackson@ResponseBody
fastjsonJSON.parseObject(...)
代码
枚举序列化和反序列化的代码 枚举序列化和反序列化的代码
使用方式springConverter组件的使用spring 接收参数为form表单请求时,默认用的converter组件进行转换对象
12345678@Configurationpublic class AddEnumConverter implements WebMvcConfigurer { @Override public void addFormatters(For ...