标签: serializable

可串行化对象在放入捆绑包时是否总是被序列化?

我们想知道当使用Bundle可序列化或可分割的对象时,编组何时实际发生?一旦你把它放在捆绑中?由于bundle主要用于简单地在两个屏幕之间传递数据(我们在这里甚至不讨论IPC!),编组对象似乎没什么意义,因为它始终保留在内存中,没有?

我们是否正确地假设编组(无论是Java序列化还是Android分区)只会发生

  1. 必须将数据传递给另一个进程,例如在RMI期间,或
  2. 组件(活动或服务)被破坏,实例状态必须写入磁盘?

我见过Android框架工程师(我相信是Dianne Hackborn)说应该使用Parcelable而不是Serializable因为前者更快.多快了?如果对象在大多数情况下都没有编组,那么这是否会产生影响(假设我们对此的假设是正确的)?

android bundle marshalling serializable parcelable

6
推荐指数
1
解决办法
1403
查看次数

NonSerialized属性创建错误

我试图序列化具有嵌套类的对象.我用[NonSerialized]属性标记了嵌套类,但是收到错误:

属性"NonSerialized"在此声明类型上无效.它仅对"字段"声明有效.

如何从序列化中省略嵌套类?

我已经包含了一些可能显示我想要做的代码.谢谢你的帮助.

[Serializable]
public class A_Class
{
    public String text { get; set; }

    public int number { get; set; }
}

[Serializable]
public class B_Class
{
    [NonSerialized]
    public A_Class A { get; set; }

    public int ID { get; set; }
}

public  byte[] ObjectToByteArray(object _Object)
{
    using (var stream = new MemoryStream())
    {
        var formatter = new BinaryFormatter();
        formatter.Serialize(stream, _Object);
        return stream.ToArray();
    }
}

void Main()
{
    Class_B obj = new Class_B()

    byte[] data = ObjectToByteArray(obj); …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization serializable

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

serialVersionUID命名约定

有没有可行的原因,为什么serialVersionUID字段没有命名为SERIAL_VERSION_UID?

根据java.io.Serializable的文档:

可序列化类可以通过声明名为"serialVersionUID"的字段来显式声明其自己的serialVersionUID,该字段必须是static,final和long类型:

ANY-ACCESS-MODIFIER静态最终长serialVersionUID = 42L;

在引用Java命名约定时,所有静态最终(常量)字段都应该被限制,其片段用下划线分隔.

java naming-conventions serializable

6
推荐指数
1
解决办法
643
查看次数

linqpad和自定义IPrincipal可序列化

我正在使用LINQPad来测试代码(我必须说,这是一个很棒的产品),但是当我尝试将Thread.CurrentPrincipal设置为一个自定义的IPrincipal时,我遇到了一个异常,该自定义的IPrincipal在示例中跟随了一个示例的SerializableAttribute问题

void Main()
{
    Thread.CurrentPrincipal = new MyCustomPrincipal();
}

// Define other methods and classes here
[Serializable]
public class MyCustomPrincipal : IPrincipal
{
    public bool IsInRole(string role)
    {
        return true;
    }

    public IIdentity Identity 
    { 
        get
        {
            return new WindowsIdentity("RECUPERA\\m.casamento");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在LINQPad(C#Program as Language)中运行此代码时,我得到以下异常

Type is not resolved for member 'UserQuery+MyCustomPrincipal,query_nhxfev, Version=0.0.0.0, 
Culture=neutral, PublicKeyToken=null' 
RuntimeMethodInfo: PluginWindowManager.get_Form ()
Run Code Online (Sandbox Code Playgroud)

如果我删除Serializable属性一切正常.这似乎是与LINQPad使用的AppDomain体系结构相关的问题,以及框架无法找到定义MyCustomPrincipal的程序集.此外,我相信将MyCustomPrincipal定义到另一个程序集并将其放入GAC可以解决问题,但这对我来说不是一个选择.有人有想法吗?

谢谢,马可

编辑:我不知道它是否可以帮助,但我遇到了与SqlDependency.Start相同的问题:将Serializable放在IPrincipal上使得框架抛出一个错误,抱怨它无法找到定义类型的程序集IPrincipal的.我用一个可耻的黑客解决了:

System.Security.Principal.IPrincipal principal;
principal = System.Threading.Thread.CurrentPrincipal;

System.Threading.Thread.CurrentPrincipal = null;
try
{
    SqlDependency.Start(connectionString);
        m_SqlDependencyStarted = true;
}
catch (Exception …
Run Code Online (Sandbox Code Playgroud)

c# iprincipal serializable linqpad

6
推荐指数
1
解决办法
707
查看次数

进程被终止后恢复状态

我已经实现了onRestoreInstanceState和onSaveInstanceState.当应用程序最小化时(通过按主页按钮,或其他活动位于前台),它们都能成功运行.但是,当我最小化应用程序并终止进程时(通过打开当前进程列表并结束该进程),应用程序不会还原已保存的实例状态.如何让它恢复保存的状态?我是使用serializable将savedInstanceState包写入文件的最佳选择(因此将某些内容存储在硬盘驱动器上,而不是RAM中),然后从文件中重新加载savedInstanceState?

android serializable reload savestate

6
推荐指数
1
解决办法
1984
查看次数

java中瞬态变量的任何实时示例

从问题为什么Java有瞬态字段?.我能够理解瞬态.但是,在设计时无法评估使用transient关键字.

public class A implements Serializable 
{
    public String s;
    public transient ts; 
}
Run Code Online (Sandbox Code Playgroud)

如果我以另一种方式做同样的事情..

public class A implements Serializable 
{
    public String s;
    //public transient ts;//removing this variable.

} 
Run Code Online (Sandbox Code Playgroud)

并在类中使用另一个类和define方法并定义变量ts并执行操作并将s的值保存为业务定义.

我没有在网上找到任何实时的例子,我将决定定义一个变量transient.

我怎么能在设计时决定定义瞬态?有没有可以帮助我理解的实时场景?

java serializable transient

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

序列化对象时包括外部变量

我正在尝试使用Java 8 lambdas并且有关于对象序列化的一般问题.例如,如果executor.execute只有一个方法并且在没有序列化的情况下运行代码块,则以下输入将打印5.但是,如果我通过SerializedLambda序列化lambda表达式并将其反序列化,则它会打印null,因为它在此新的反序列化对象中没有前一个上下文.此外,它编译没有任何投诉,因为第一个上下文解决了外部变量.(本例中为finalVar):

final int finalVar = 5;
executor.execute(() -> {
    System.out.println(finalVar);
});
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能告诉SerializedLambda将finalVar包含到序列化输出中,而不实现具有finalVar变量字段的接口,并在构造时将其值设置为字段.AFAIK,这是用Java做这种事情最干净的方法:

final int finalVar = 5;
executor.execute(new Runnable() {
    int myVar = finalVar;

    public void run() { 
         System.out.println(myVar);
    }
);
Run Code Online (Sandbox Code Playgroud)

我甚至不确定这一点,但我认为编译器可以找出外部变量,并在我尝试序列化该lambda时序列化并包含它们.有没有什么技巧可以让Java做这样的事情,还是有任何语言有这样的功能?

java serialization scala serializable deserialization

6
推荐指数
1
解决办法
233
查看次数

Redis序列化和反序列化

我注意到存储在Redis中的一些序列化对象在反序列化方面存在问题.

当我对存储在Redis中的对象类进行更改时,通常会发生这种情况.

我想了解这个问题,以便为解决方案设计一个清晰的设计.

我的问题是,导致反序列化问题的原因是什么?拆除公共/私人财产会导致问题吗?或许可以添加新属性?为类添加新函数会产生问题吗?更多的构造函数呢?

在我的序列化对象中,我有一个属性Map,如果我更改(更新了一些属性,添加了函数等)myObject,它会导致反序列化问题吗?

serializable redis deserialization spring-data spring-data-redis

6
推荐指数
1
解决办法
8618
查看次数

HashMap不可序列化

HashMapSerializable键/值应该是Serializable.

但这对我不起作用.尝试了一些其他IO流.没有用.

有什么建议吗?

测试代码

public class SimpleSerializationTest {
    @Test
    public void testHashMap() throws Exception {
        HashMap<String, String> hmap = new HashMap<String, String>() {{
            put(new String("key"), new String("value"));
        }};

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutput out = null;
        out = new ObjectOutputStream(bos);
        out.writeObject(hmap);
        byte[] yourBytes = bos.toByteArray();
        if (out != null) {
            out.close();
        }
        bos.close();

        ByteArrayInputStream bis = new ByteArrayInputStream(yourBytes);
        ObjectInput in = null;
        in = new ObjectInputStream(bis);
        Object o = in.readObject();
        bis.close();
        if (in != …
Run Code Online (Sandbox Code Playgroud)

java hashmap serializable

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

可序列化是否与顺序一致性相同?

我发现人们在回答线性化和可分割性之间存在差异,但我发现人们都没有发现可串行化与顺序一致性相同或者与之不同.

此外,我在不同的文章,书籍和网页上对上述术语的不同定义进行了抨击,我对此感到困惑.有人可以解释可串行性和顺序一致性之间的区别是否存在.

如果可能的话,我将赞赏上述术语的正式定义(无论是简单的英语还是程序或执行历史).

consistency serializable

6
推荐指数
1
解决办法
712
查看次数