Java面试常遇到的问题(二)
2018-01-09 22:12
357 查看
Serializable与Parcelable的区别?
序列化:即把一个Java对象转换成字节序列存储至一个存储媒介的过程。
反序列化:把字节序列恢复成java对象的过程。
我们在进行Android开发的时候总会遇到对象在Activity和Fragment他们之间是不能直接传递,通常需要借助于Bundle和Intent传递对象。通过Android的API我们知道有两种选择传递对象,但是需要传递的对象需要Serializable或者Parceable序列化。实现Java对象序列化的方式如下:
方式一:Serializable,要传递的类实现Serializable接口传递对象,
方式二:Parcelable,要传递的类实现Parcelable接口传递对象。
他们两者之间的区别:
1)、Serializable的简单使用,简单的实现接口就ok,无需实现方法,Java便会对这个对象进行高效的序列化操作。但是它也有缺点这种方法使用啦反射,序列化过程中很慢,这种机制会在序列化的过程中创建很多临时对象,容易触发垃圾回收机制。
2)、Parcelable的使用如下:
看着这种写法 是不是比第一种方法要复杂,其实也有一种比较简单的方法就是:如下让你一秒完成Parceable的序列化:
首先在androidstudio中使用Ctral+alt+s的快捷键到as的设置中。寻找Parcelable这个相关的插件使用,重启as即可。如下:
重启as后,找到那个你要添加的对象使用alt+insert快捷键,选择Parcelable例如:
即可。很明显实现Parcelable并不容易。实现Parcelable接口需要写大量的模板代码,这使得对象代码变得难以阅读和维护。 Serializable 运行速度比较慢。你想偷点懒就用它吧,不过要记得serialization是一个比较耗资源的操作,尽量少使用。
如果你想要传递一个包含许多对象的列表,那么整个序列化的过程的时间开销可能会超过一秒,这会让屏幕转向的时候变得很卡顿。有已上Parcelable序列化的方法,可以让我们的读对象序列化效率更高,序列化速度更快,而且占用较少的资源。
序列化:即把一个Java对象转换成字节序列存储至一个存储媒介的过程。
反序列化:把字节序列恢复成java对象的过程。
我们在进行Android开发的时候总会遇到对象在Activity和Fragment他们之间是不能直接传递,通常需要借助于Bundle和Intent传递对象。通过Android的API我们知道有两种选择传递对象,但是需要传递的对象需要Serializable或者Parceable序列化。实现Java对象序列化的方式如下:
方式一:Serializable,要传递的类实现Serializable接口传递对象,
方式二:Parcelable,要传递的类实现Parcelable接口传递对象。
他们两者之间的区别:
1)、Serializable的简单使用,简单的实现接口就ok,无需实现方法,Java便会对这个对象进行高效的序列化操作。但是它也有缺点这种方法使用啦反射,序列化过程中很慢,这种机制会在序列化的过程中创建很多临时对象,容易触发垃圾回收机制。
2)、Parcelable的使用如下:
public class Student implements Parcelable { private String name; private String gender; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.name); dest.writeString(this.gender); } public Student() { } protected Student(Parcel in) { this.name = in.readString(); this.gender = in.readString(); } public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() { @Override public Student createFromParcel(Parcel source) { return new Student(source); } @Override public Student[] newArray(int size) { return new Student[size]; } }; }
看着这种写法 是不是比第一种方法要复杂,其实也有一种比较简单的方法就是:如下让你一秒完成Parceable的序列化:
首先在androidstudio中使用Ctral+alt+s的快捷键到as的设置中。寻找Parcelable这个相关的插件使用,重启as即可。如下:
重启as后,找到那个你要添加的对象使用alt+insert快捷键,选择Parcelable例如:
即可。很明显实现Parcelable并不容易。实现Parcelable接口需要写大量的模板代码,这使得对象代码变得难以阅读和维护。 Serializable 运行速度比较慢。你想偷点懒就用它吧,不过要记得serialization是一个比较耗资源的操作,尽量少使用。
如果你想要传递一个包含许多对象的列表,那么整个序列化的过程的时间开销可能会超过一秒,这会让屏幕转向的时候变得很卡顿。有已上Parcelable序列化的方法,可以让我们的读对象序列化效率更高,序列化速度更快,而且占用较少的资源。
相关文章推荐
- Java面试过程中会遇到的问题
- JAVA中的多线程问题(高级面试中经常遇到)
- java基础:常见的概念问题,面试笔试可能会遇到哟
- java面试遇到问题二 ------java编程语言的特点
- 最近面试java遇到的高频问题总结
- java面试,经常遇到面试官的问题
- 【最近面试遇到的一些问题】JAVA UTF-8 GB2312 编码互转
- java面试遇到的各种问题(不定期更新中~~)
- Java面试笔试常遇到的问题
- java面试中遇到的问题
- 面试Java遇到的尴尬问题
- Java基础面试遇到问题(一)
- Java面试中常遇到的问题
- java面试时遇到的一个有意思的小问题
- java面试遇到的问题一 -----面向对象的特点
- JAVA自己面试遇到的问题
- 【转】JAVA中的多线程问题(高级面试中经常遇到)
- 最全Java面试题(一)面试时这些问题你早晚都会遇到
- java高级工程师面试最可能会遇到的问题面试题
- java面试遇到问题三 -----final关键字和static关键字