为什么Android为序列化对象提供了两个接口?序列化对象与Android Binder和AIDL文件interopt ?
当前回答
我的回答有点晚了,但我希望它能帮助到其他人。
在速度方面,可打包>序列化。但是,自定义Serializable是个例外。它几乎在Parcelable的范围内,甚至更快。
参考资料:https://www.geeksforgeeks.org/customized-serialization-and-deserialization-in-java/
例子:
要序列化的自定义类
class MySerialized implements Serializable {
String deviceAddress = "MyAndroid-04";
transient String token = "AABCDS"; // sensitive information which I do not want to serialize
private void writeObject(ObjectOutputStream oos) throws Exception {
oos.defaultWriteObject();
oos.writeObject("111111" + token); // Encrypted token to be serialized
}
private void readObject(ObjectInputStream ois) throws Exception {
ois.defaultReadObject();
token = ((String) ois.readObject()).subString(6); // Decrypting token
}
}
其他回答
Parcelable是Android开发中的一种标准。但不是因为速度
Parcelable是数据传输的推荐方法。但是如果你正确地使用serializable,你会发现serializable有时甚至比parcelable还要快。或者至少时间是可以比较的。
Parcelable比Serializable快吗?
不,如果序列化操作正确的话。
Usual Java serialization on an average Android device (if done right *) is about 3.6 times faster than Parcelable for writes and about 1.6 times faster for reads. Also it proves that Java Serialization (if done right) is fast storage mechanism that gives acceptable results even with relatively large object graphs of 11000 objects with 10 fields each. * The sidenote is that usually everybody who blindly states that "Parcelable is mush faster" compares it to default automatic serialization, which uses much reflection inside. This is unfair comparison, because Parcelable uses manual (and very complicated) procedure of writing data to the stream. What is usually not mentioned is that standard Java Serializable according to the docs can also be done in a manual way, using writeObject() and readObject() methods. For more info see JavaDocs. This is how it should be done for the best performance.
所以,如果serializable更快更容易实现,为什么android有parcelable呢?
原因在于本地代码。创建Parcelable不仅仅是为了进程间通信。它也可以用于代码间通信。你可以从c++原生层发送和接收对象。就是这样。
你应该选择什么?两者都很有效。但我认为Parcelable是更好的选择,因为谷歌推荐它,你可以从这个帖子中看到,它更受欢迎。
Parcelable将对象转换为字节流,以便在Android的进程之间传递对象。
序列化将POJO转换为字符串(JSON字符串),并用于跨平台传输对象信息。
如果你在android studio中使用paracelable插件,parcelable的实现可以更快。搜索Android Parcelable代码生成器
在编组和解组方面存在一些性能问题。Parcelable比Serializable快两倍。
请浏览以下连结:
http://www.3pillarglobal.com/insights/parcelable-vs-java-serialization-in-android-app-development
1. 可序列化的
@see http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
什么接口?
是标准的Java接口吗
速度
比Parcelable慢
2. Parcelable
@see http://developer.android.com/reference/android/os/Parcelable.html
什么接口?
android。操作系统接口 这意味着谷歌开发的Parcelable在android上有更好的性能
速度
更快(因为它针对android开发进行了优化)
综上所述
要知道Serializable是一个标准的Java接口,Parcelable是Android开发的接口
推荐文章
- 何时在Android中使用RxJava,何时使用Android架构组件中的LiveData ?
- 如何在Android项目中使用ThreeTenABP
- 指定的子节点已经有一个父节点。你必须先在子对象的父对象上调用removeView() (Android)
- 我的Android设备没有出现在adb设备列表中
- 在没有安装apk的情况下获取Android .apk文件的VersionName或VersionCode
- Fragment onResume() & onPause()不会在backstack上被调用
- 如何设置基线对齐为假提高性能在线性布局?
- 如何获得当前屏幕方向?
- 如何在Android中渲染PDF文件
- 我如何解决错误“minCompileSdk(31)指定在一个依赖的AAR元数据”在本机Java或Kotlin?
- 如何改变TextInputLayout的浮动标签颜色
- Android工作室如何运行gradle同步手动?
- 如何以编程方式在我的EditText上设置焦点(并显示键盘)
- 如果在片段和活动中同时定义,则不会在片段中调用onRequestPermissionsResult
- 方法setDrawerListener已弃用