android studio自动绑定,Android Studio 自动添加serialVersionUID-程序员宅基地

技术标签: android studio自动绑定  

为了反序列化时不出问题,实现Serializable接口的时候,最好也要设置下serialVersionUID (serialVersionUID的作用请参照文末说明),但是Android Studio貌似默认不能自动添加serialVersionUID。

其实,在Preferences里设置下就okay了。

在Editor下面找到Inspections, 然后在右侧选择java

9252e1e4e82e

屏幕快照 2018-03-23 上午8.57.56.png

在java这一项里找到Serialization issues这一项,并找到它下面的Serializable class without 'serialVersionUID',并把该项勾选即可。 然后点击apply 即可。

9252e1e4e82e

Group.png

这时候在实现了Serializable接口的类名上点击一下,等左边出现黄色警示灯,然后点击黄色警示灯,就能看到自动生成serialVersionUID的提示了。

9252e1e4e82e

Group 2.png

关于serialVersionUID的作用解释:

serialVersionUID是用来辅助序列化和反序列化的。当我们把一个对象序列化到本地的时候,serialVersionUID也会一起被写入序列化的文件中,等下次反序列化的时候,系统会自动比对序列化文件中的serialVersionUID与类中的serialVersionUID是否一致,如果不一致则会抛出异常,发序列化也会失败。

如果我们没有指定serialVersionUID,那么序列化的时候系统会自动根据当前类结构生成一个hash值并写入序列化文件中。如果下次反序列化的时候我们已经对类结构进行了修改,那么会导致反序列化时系统自动计算的当前类hash值与之前序列化文件中的hash值不一致,从而无法反序列化。

如果我们自己指定了serialVersionUID,那么不管类结构如何改变,序列化到文件中的serialVersionUID是永远和我们类中的serialVersionUID一致的,系统会最大限度的帮我们完成反序列化,当然,如果类结构发生了非常规性的变化,比如修改类名,修改成员变量类型,这时候反序列化也是会失败的。

序列化和反序列化也是比较简单的,demo如下:

public class User implements Serializable {

private static final long serialVersionUID = -4211449776975163975L;

private int userId;

private String userName;

// ....

}

/*- 序列化和反序列化 -*/

private void serialAndUnSerial() {

String path = getExternalCacheDir() + "/cache.txt";

// 序列化到本地

User user = new User();

user.setUserId(0);

user.setUserName("Bob");

ObjectOutputStream outputStream = null;

FileOutputStream fileOutputStream = null;

try {

fileOutputStream = new FileOutputStream(path);

outputStream = new ObjectOutputStream(fileOutputStream);

outputStream.writeObject(user);

} catch (IOException e) {

e.printStackTrace();

} finally {

if (fileOutputStream != null) {

try {

fileOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (outputStream != null) {

try {

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

// 反序列化

User user1 = null;

ObjectInputStream inputStream = null;

FileInputStream fileInputStream = null;

try {

fileInputStream = new FileInputStream(path);

inputStream = new ObjectInputStream(fileInputStream);

user1 = (User) inputStream.readObject();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} finally {

if (fileInputStream != null) {

try {

fileInputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (inputStream != null) {

try {

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

另外,补充一下,静态成员变量属于类,不属于类对象,所以不会参与序列化。同时,标示了transient的成员变量也不在序列化之列。

最后帮朋友打个小广告

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_28805935/article/details/117296757

智能推荐

git编译报错解决-程序员宅基地

文章浏览阅读939次。git configure 配置时没有设定--with-curl --with-expat 造成首先确定是否安装curl包:rpm-qa|grepcurl如果没有安装,一定要安装:yuminstall-ycurlcurl-devel安装完成后,删除原安装目录和编译目录,重新解压缩:tar-zxfgit-2.9.2.tar.gz-C/tmp/cd/..._--with-curl失败

Johnson算法:多源最短路算法-程序员宅基地

文章浏览阅读304次。Johnson算法请不要轻易点击标题一个可以在有负边的图上使用的多源最短路算法时间复杂度\(O(n \cdot m \cdot log \ m+n \cdot m)\)空间复杂度\(O(n+m)\)这个神奇的算法综合利用了Dijkstra算法和Bellman-Ford算法(不要慌,虽然有负边但Dijkstra可以跑!)在开始讲解之前,我们将其与floyd进行比较\(flo..._多源最短路的最优复杂度

JTopo + Vue 实现自定义拖拽流程图_vue拖拽流程图-程序员宅基地

文章浏览阅读8.2k次,点赞32次,收藏42次。JTopo + Vue 实现自定义拖拽流程图 市场上做流程图的插件比较多,这里介绍一种基于canvas编写的js插件,结合vue框架做出精美的流程图 首先搭建vue框架,这里就不做介绍,由于jtopo官方demo里用到了jquery,所以我的项目里也引用了jquery插件,鉴于这里用到了很多的dom操作,所以建议大家也直接引用jquery进行操作; 然后将jtopo.js下载到本地,放到自己的vue项目的静态文件目录下,如下图: ![vue引入jtopo.js](https://im_vue拖拽流程图

C语言 实现字符串的复制 char * str_copy_char copy-程序员宅基地

文章浏览阅读3.6k次,点赞3次,收藏7次。编写一个函数,实现字符串的复制,函数首部定义为:char*str_copy(char*d,char*s)函数功能为:将第二个参数s所表示的字符串复制到第一个参数d所表示的字符串中,函数返回值为第一个参数的值。请写出完整的函数,并写出主函数,对该函数进行验证。说明:本题不允许使用string.h中的标准函数,不允许改变函数首部char * str_copy1(char *d, char *s);char * str_copy2..._char copy

webgl 学习心得_webgl心得体会-程序员宅基地

文章浏览阅读1.2k次。我本是搞Android 的,公司需要就搞3D展示了,刚开始找了很多资料,觉得threejs最为适合我,原因是我会点前端的东西,threejs也比较简单,demo也齐全;但是,由于公司没有真正的UI,全凭老板一句话,你们懂得,修修改改,晚上学习,白天实现功能,搞了几个月,实现的功能有,导入3d文件,展示楼层,设备参数展示,报警,位置提醒这些主要的功能,又感觉不满意,想要bim功能,又想要游戏效果,其..._webgl心得体会

【Allegro】关于焊盘与封装制作_anti-pad-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏15次。焊盘焊盘类型:规则焊盘(Regular Pad),反焊盘(Anti-Pad),热风焊盘,不规则焊盘。Regular Pad规则焊盘,即与元器件管脚焊接的有规则形状的焊盘。Anti-Pad反焊盘,使引脚和周围的铜区域不连接。Thermal Relief又称为花焊盘,热风焊盘,它的主要作用通过减少焊盘与电源和地层敷铜区的连接面积而防止焊接时焊盘散热太快不好焊。热风焊盘需要现在alleg..._anti-pad

随便推点

使用微信小程序开发制作一个简单的旅游攻略应用_微信小程序编写旅游小程序-程序员宅基地

文章浏览阅读300次,点赞6次,收藏12次。开发者只需熟悉微信小程序的开发流程和相关API,按照需求设计界面、编写交互逻辑,即可实现一个功能完备的小程序应用。当然,以上示例只是一个简单的示范,实际项目的开发还需要根据具体需求进行调整和完善。二、项目开发 1.创建项目 打开微信开发者工具,点击新建项目,填写项目名称和项目路径,选择对应的小程序类型,点击确定创建项目。以上是一个简单的旅游攻略应用的微信小程序开发示例,通过以上代码可以实现目的地、酒店和美食的展示和存储。可以使用微信小程序提供的组件进行页面的布局和样式的设置,也可以自定义组件来满足需求。_微信小程序编写旅游小程序

随笔---数据库索引总结_模糊查询 半包走索引-程序员宅基地

文章浏览阅读128次。建立索引的目的:加快查询的效率,当查询多于增删操作,适用于建立索引,建立索引的列,一旦进行增删改会进行索引的维护,也不宜大量建索引,索引会占用磁盘空间。建立索引的地方:数据库以查询为主,在经常查询的列上需要join的字段上,join的字段类型也应该相同多个列建立索引,能满足最左前缀原则主键,外键建立索引确保索引的唯一性数据长度较小的列,索引文件小如果一个列是比较长的字符串,为了加快这..._模糊查询 半包走索引

MySQL5.6 PERFORMANCE_SCHEMA 说明_mysql 5.6 关闭performance部分功能-程序员宅基地

文章浏览阅读1k次。背景: MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。MySQL5.5默认是关闭的,需要手动开启,在配置文件里添加:[mysqld]performance_schema=ON_mysql 5.6 关闭performance部分功能

css首行缩进(css首行缩进)-程序员宅基地

文章浏览阅读7.1k次,点赞4次,收藏22次。首行缩进连个字符和首行缩进连个字是一样的概念?首行缩进连个字符和不一样的概念啊,字符和字是不一样的如何在css中控制段落的首行缩进??如何在css中控制段落的首行style="text-indent:24px"……控制段落缩进,24px是缩进距离……#####例如,拿你说的话举例:css中,我想..._css 首行缩进一个字

浏览器无法连接到代理服务器解决办法-程序员宅基地

文章浏览阅读6.3k次,点赞2次,收藏3次。工具:WIN10 IE浏览器故障如图:方法如下:1.点击转到代理2.关闭-使用代理服务器3.刷新浏览器页面或重启浏览器_浏览器无法连接到代理服务器

echarts图表x轴数据太多显示不全的问题_echarts x轴内容太多 label 不显示后 图上的点就没了-程序员宅基地

文章浏览阅读1.8w次,点赞10次,收藏15次。问题如图,x轴数据条数过多可能导致x轴显示不全,开始我使用下面方法xAxis: { type: "category", min: min, max: max, data:time, axisLabel: { interval:num,//interval为x轴两..._echarts x轴内容太多 label 不显示后 图上的点就没了

推荐文章

热门文章

相关标签