我理解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) 我有一个需要持久保存在数据库上的POJO,当前设计将其字段指定为单个字符串列,并且不向表中添加其他字段.
意思是,对象需要以某种方式序列化.所以只是为了基本的实现,我去设计了我自己的对象的序列化形式,这意味着将它的所有字段连接成一个很好的字符串,用我选择的分隔符分隔.但这是相当丑陋的,并且可能会导致问题,比如说其中一个字段包含我的分隔符.
所以我尝试了基本的Java序列化,但是从我进行的一个基本测试来看,这在某种程度上变成了一个非常昂贵的操作(构建一个ByteArrayOutputStream,一个ObjectOutputStream,依此类推,反序列化).
那么我的选择是什么?序列化对象进入数据库的首选方法是什么?
编辑:这将是我项目中非常常见的操作,因此必须将开销保持在最低限度,并且性能至关重要.此外,第三方解决方案很好,但不相关(并且通常产生我试图避免的开销)
我正在阅读关于Java序列化的知识,并且知道如果实现了Serializable接口,那么类是序列化的.
但Serializable是一个标记界面.那么JVM如何知道应该使用哪些方法进行序列化或反序列化?
根据我的理解,接口中声明的方法是通过多态来调用的.
我将在下面举例说明我的问题.
public class MySerializable implements Serializable{
public void serialize(){
//Some code to serialize to a file output stream.
}
public void deSerialize(){
//Some code to de-serialize to a file input stream.
}
}
Run Code Online (Sandbox Code Playgroud)
那么现在JVM将如何调用serialize/deSerialize方法呢?
如果我必须通过代码手动调用它们,为什么编译器应该知道Serializable接口是否已实现?