相关疑难解决方法(0)

什么是对象序列化?

"对象序列化"是什么意思?你能用一些例子解释一下吗?

java serialization object-serialization

373
推荐指数
8
解决办法
28万
查看次数

自定义枚举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序列化

我有一个需要持久保存在数据库上的POJO,当前设计将其字段指定为单个字符串列,并且不向表中添加其他字段.

意思是,对象需要以某种方式序列化.所以只是为了基本的实现,我去设计了我自己的对象的序列化形式,这意味着将它的所有字段连接成一个很好的字符串,用我选择的分隔符分隔.但这是相当丑陋的,并且可能会导致问题,比如说其中一个字段包含我的分隔符.

所以我尝试了基本的Java序列化,但是从我进行的一个基本测试来看,这在某种程度上变成了一个非常昂贵的操作(构建一个ByteArrayOutputStream,一个ObjectOutputStream,依此类推,反序列化).

那么我的选择是什么?序列化对象进入数据库的首选方法是什么?

编辑:这将是我项目中非常常见的操作,因此必须将开销保持在最低限度,并且性能至关重要.此外,第三方解决方案很好,但不相关(并且通常产生我试图避免的开销)

java database serialization

15
推荐指数
2
解决办法
6359
查看次数

java序列化如何在内部工作?

我正在阅读关于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接口是否已实现?

java serialization

8
推荐指数
1
解决办法
2万
查看次数