java - 使用资源引用属性序列化类实例是否安全?

标签 java android serialization android-drawable android-resources

我想序列化一个对象,例如:

   class Dog implements Serializable{

       public String name;
       public int iconDrawable;
    }

iconDrawable 是一个从 R.java 指向可绘制资源的 int。

所以我可以像这样制作一只狗:

Dog dog = new Dog();
dog.name= "Barky";
dog.iconDrawable = R.drawable.dog_icon; //portrait of a dog instance

我的问题是:

序列化此对象是否安全? iconDrawable 是最终数字吗?当我反序列化时,我是否总是得到相同的可绘制对象? 或者引用可以应用程序启动或应用程序终止时更改?

或者我应该将可绘制对象的名称存储在字符串属性字段中并使用getIdentifier? (稍微复杂一点,但肯定有效)

最佳答案

R.java 是在构建时为您生成的。如果您修改(添加、删除等)资源或者使用新版本的 Android 构建工具来构建项目,它将会发生变化。

话虽这么说,如果您仅使用资源 ID 在运行时将对象传输到另一个 Activity/fragment 或类似的东西,那么序列化/反序列化资源 ID 是安全的。

但是,如果您将其序列化以实现持久性,则不安全,因为这些 id 可能会在应用程序构建之间发生更改。在这种情况下,最好使用 getIdentifier

关于java - 使用资源引用属性序列化类实例是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35272941/

相关文章:

java - 隐藏部分网址

java - 将数据从 MS-Access 传输到 MySql 数据库的最佳方法

android - ShowCaseView 圆圈大小

C#:要实现 XML 序列化,从 IEnumerable 继承的类型必须具有 Add(System.Object) 的实现

java - 反序列化一组枚举以用作标志

Java 使用新名称保存文件时出现问题

java - JAVA 中的全局变量替代方案

android broadcastreceiver 与听众

Java 套接字 : Read/receive the same instance multiple times after change values: ObjectInputStream. readObject()

java - jcouchdb : svenson unable to parse json string