相关疑难解决方法(0)

Java自定义序列化

我有一个对象,其中包含一些我想序列化的不可序列化的字段.它们来自我无法更改的单独API,因此将它们设置为Serializable不是一种选择.主要问题是Location类.它包含四个可以序列化的东西,我需要它们,所有的内容.如何使用read/writeObject创建可执行以下操作的自定义序列化方法:

// writeObject:
List<Integer> loc = new ArrayList<Integer>();
loc.add(location.x);
loc.add(location.y);
loc.add(location.z);
loc.add(location.uid);
// ... serialization code

// readObject:
List<Integer> loc = deserialize(); // Replace with real deserialization
location = new Location(loc.get(0), loc.get(1), loc.get(2), loc.get(3));
// ... more code
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

java serialization

61
推荐指数
2
解决办法
7万
查看次数

自定义枚举Serializable也是吗?

我理解Enum是Serializable.因此,这样做是安全的.(selectedCountry是enum Country)

没有客户成员变量的原始枚举

public enum Country {
    Australia,
    Austria,
    UnitedState;
}
Run Code Online (Sandbox Code Playgroud)

分段

@Override
public void onActivityCreated (Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        selectedCountry = (Country)savedInstanceState.getSerializable(SELECTED_COUNTRY_KEY);
    }
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putSerializable(SELECTED_COUNTRY_KEY, selectedCountry);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在自定义枚举类中有非可序列化成员,该怎么办?例如,

原始枚举客户成员变量

package org.yccheok;

import org.yccheok.R;

/**
 *
 * @author yccheok
 */
public enum Country {
    Australia(R.drawable.flag_au),
    Austria(R.drawable.flag_at),
    UnitedState(R.drawable.flag_us);

    Country(int icon) {
        this.icon = icon;
        nonSerializableClass = new NonSerializableClass(this.toString());
    }

    public int getIcon() {
        return icon;
    } …
Run Code Online (Sandbox Code Playgroud)

java android

56
推荐指数
2
解决办法
6万
查看次数

标签 统计

java ×2

android ×1

serialization ×1