标签: serializable

Android:从Parcelable到Serializable的任何快捷方式,而不使用marshall()?

我知道Parcelable(快)和Serializable(慢)之间的性能差异.但是,我需要持久存储某些应用程序信息,而不仅仅是在一个生命周期内,因此onSaveInstanceState和使用Parcelable对象的相关方法是不合适的.

所以我把注意力转向了Serializable.主要是我有AbstractList类型存储 - 这很好,因为它们实现Serializable.然而,我存储在其中的许多类型是Parcelable但不是Serializable,例如RectF.

我认为"没问题",因为我可以轻松地生成一个包,Parcelable.writeToParcel(parcel, flags)然后调用marshall()它来创建一个byte[]我可以序列化和反序列化的包.我想我会使用泛型; 创建一个SerializableParcelable<Parcelable> implements Serializable类,为Parcelable我希望序列化的所有类型提供一个适合的解决方案.然后我会将每个RectF存储在这个包装器中ArrayList,然后看看它的Parcelable内容是否可序列化.

但是,API文档规定marshall()不得将其用于持久存储:

public final byte [] marshall()

返回宗地的原始字节.

您在此处检索的数据不得放在任何类型的持久存储中(在本地磁盘上,通过网络等).为此,您应该使用标准序列化或其他类型的通用序列化机制.Parcel编组表示针对本地IPC进行了高度优化,因此不会尝试保持与在不同版本的平台中创建的数据的兼容性.

所以现在我被卡住了.我可以忽略这个警告并遵循我上面概述的路线,或者通过扩展Parcelable我想要序列化和创建定制序列化方法的每个人来避免这个问题,这似乎非常浪费时间和精力.

有没有人知道Parcelable没有使用序列化对象的'正确'快捷方式marshall()?或者,如果不注意指定的警告,我应该继续吗?也许SQLite数据库是可行的方法,但我不确定并希望得到你的建议.

非常感谢.

android marshalling serializable parcelable

7
推荐指数
1
解决办法
2219
查看次数

序列化继承:如果基类未标记为[Serializable],是否会抛出异常?

参加考试,考试说我错了.以黄色标记的答案是假定的正确答案.

在下面的引用中,我认为粗体标记的部分是错误的:"Serializable属性不是由派生类继承的,因此如果您只使用Serializable属性标记Encyclopedia类,则运行时将在尝试序列化时抛出异常名称字段 ".

在此输入图像描述

我实际上创建了一个示例项目,其中包含一个Animal类和一个Cat派生自该类的类.我标记了Cat课程[Serializable]Animal课程没有.

我能够成功地序列化和反序列化Cat类,包括Animal属性.

这是.NET版本问题吗?考试是70-536,所以它的目标是2.0.

.net c# inheritance serializable

7
推荐指数
1
解决办法
1041
查看次数

类型为T的通用,其中T具有特定属性

是否有可能创建类型的一般方法T,其中T具有特定属性?

例如:

public static XmlDocument SerializeObjectToXml<T>(T obj)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

我想只序列化一个带有Serializable和/或DataContract属性的类:

[Serializable]
[DataContract(Name = "viewModel", Namespace = "ns")]
internal class ViewModel
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

c# generics attributes serializable

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

Oracle:在可序列化事务中插入后立即选择

我最近遇到了一个奇怪的问题,在Oracle数据库中编程:在一个可序列化的事务中,我做了一个大量插入(INSERT ... SELECT),然后立即打开一个带有SELECT的变量表上的游标.我假设这个游标将包含新插入的行,但令我惊讶的是,它的内容不稳定,有时包括所有新插入的行,有时只包含一个子集.

我通过在打开光标之前提交解决了这个问题,但这种行为让我感到困惑.可以在同一事务中插入后进行选择,而不进行干预提交,实际上是否可信?或者这种行为是否与可序列化的事务有关?

后续:当我尝试创建一个可重现的测试用例时,我只能在添加索引后获得此行为(在这种情况下是主键索引,在实际代码中它是常规索引).也许问题在于构建索引所花费的时间,因此SELECT实际上使用不完整的索引来检索结果?无论如何,这是一个可重现的测试用例:

-- Create empty source table
CREATE TABLE TEST_CASE_1 AS 
  (SELECT 'CONTENT' AS CONTENT
   FROM DUAL
   WHERE 1 = 2)

-- Add primary key
ALTER TABLE TEST_CASE_1
ADD CONSTRAINT TEST_CASE_1_PK PRIMARY KEY (CONTENT);

-- Create empty destination table
CREATE TABLE TEST_CASE_2 AS 
  (SELECT 'CONTENT' AS CONTENT
   FROM DUAL
   WHERE 1 = 2)

-- Example of faulty code
BEGIN

  SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

  -- Populate with 100.000 rows (I used ALL_OBJECTS but any source of …
Run Code Online (Sandbox Code Playgroud)

oracle select insert serializable

7
推荐指数
1
解决办法
2191
查看次数

火花上的序列化异常

我在Spark遇到一个关于序列化的一个非常奇怪的问题.代码如下:

class PLSA(val sc : SparkContext, val numOfTopics : Int) extends Serializable
{
    def infer(document: RDD[Document]): RDD[DocumentParameter] = {
      val docs = documents.map(doc => DocumentParameter(doc, numOfTopics))
      docs
    }
}
Run Code Online (Sandbox Code Playgroud)

其中Document定义为:

class Document(val tokens: SparseVector[Int]) extends Serializable
Run Code Online (Sandbox Code Playgroud)

和DocumentParameter是:

class DocumentParameter(val document: Document, val theta: Array[Float]) extends Serializable

object DocumentParameter extends Serializable
{
  def apply(document: Document, numOfTopics: Int) = new DocumentParameter(document, 
    Array.ofDim[Float](numOfTopics))
}
Run Code Online (Sandbox Code Playgroud)

SparseVector是一个可序列化的类breeze.linalg.SparseVector.

这是一个简单的映射过程,所有类都是可序列化的,但是我得到了这个异常:

org.apache.spark.SparkException: Task not serializable
Run Code Online (Sandbox Code Playgroud)

但是当我删除numOfTopics参数时,即:

object DocumentParameter extends Serializable
{
  def apply(document: Document) …
Run Code Online (Sandbox Code Playgroud)

scala serializable apache-spark

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

如果我在使用Hashmap时没有实现Serializable会发生什么

如果我不包含"implements Serializable"会发生什么?

public class Student implements Serializable {
    private String studentNumber;
    private String firstName;
    private String lastName;
    private ArrayList<Exam> exams;
}
Run Code Online (Sandbox Code Playgroud)

java hashmap serializable

7
推荐指数
1
解决办法
1736
查看次数

不必要地实施Serializable会受到什么惩罚?

我需要为我的分布式系统类开发Java RMI应用程序.

在讲座期间,教授强调只让类实现Serializable,必须通过网络传递价值.

这意味着让太多的类实现Serializable会有一些缺点或惩罚.不需要通过网络发送的类.

我不知道如果你从未真正通过网络发送序列化/反序列化将永远不会发生任何缺点.

java rmi serializable

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

Oracle中的Phantom Read异常和PostgreSQL不会回滚事务

我注意到Oracle和PostgreSQL中都出现了以下情况.

考虑到我们有以下数据库架构:

create table post (
    id int8 not null, 
    title varchar(255), 
    version int4 not null, 
    primary key (id));    

create table post_comment (
    id int8 not null, 
    review varchar(255), 
    version int4 not null, 
    post_id int8, 
    primary key (id));

alter table post_comment 
    add constraint FKna4y825fdc5hw8aow65ijexm0 
    foreign key (post_id) references post;  
Run Code Online (Sandbox Code Playgroud)

有以下数据:

insert into post (title, version, id) values ('Transactions', 0, 1);
insert into post_comment (post_id, review, version, id) 
    values (1, 'Post comment 1', 459, 0);
insert into post_comment (post_id, review, version, …
Run Code Online (Sandbox Code Playgroud)

oracle postgresql transactions acid serializable

7
推荐指数
1
解决办法
1142
查看次数

Postgresql Serializable Transaction无法按预期工作

我正在尝试实现一个任务分配系统.用户可以从池中请求任务.即使设置为SERIALIZABLE,事务有时也会向多个用户提供相同的任务,即使它不应该.

简化架构:

CREATE TABLE tasks(
  _id CHAR(24) PRIMARY KEY,
  totalInstances BIGINT NOT NULL
);

CREATE TABLE assigned(
  _id CHAR(24) PRIMARY KEY,
  _task CHAR(24) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

任务表中填充了许多行,假设每个行都有totalInstances = 1,这意味着每个任务最多应分配一次.

查询以添加行assigned:

WITH task_instances AS (
  SELECT t._id, t.totalInstances - COUNT(assigned._id) openInstances
  FROM tasks t
  LEFT JOIN assigned ON t._id = assigned._task
  GROUP BY t._id, t.totalInstances
),

selected_task AS (
  SELECT _id
  FROM task_instances
  WHERE openInstances > 0
  LIMIT 1
)

INSERT INTO assigned(_id, _task)
SELECT …
Run Code Online (Sandbox Code Playgroud)

sql postgresql concurrency transactions serializable

7
推荐指数
1
解决办法
535
查看次数

将对象转换为Parcelable超类的子类?

好了,所以我有一个类SomeClassParcelable.

它有一个Parcelable名为的另一个类的数组SuperClass.在我的构造函数中SomeClass,我试图将SuperClass对象数组读入myArray实例变量中.这很简单; 然而:

SuperClass有两个子类FirstSubClassSecondSubClass.该数组temp应该是所有3的混合,但由于某种原因它只有SuperClass对象(ifelse if语句似乎没有执行,因为没有temp子类的实例的元素).

public SomeClass(Parcel in) {

    myArray = new SuperClass[100];

    // this is probably where the problem is due to the classloader parameter:
    Object[] temp = in.readArray(SuperClass.class.getClassLoader());

    for(int i = 0; i < myArray.length; i++) {

        if(temp[i] instanceof FirstSubClass)
            myArray[i] = (FirstSubClass) temp[i];

        else if(temp[i] instanceof SecondSubClass)
            myArray[i] …
Run Code Online (Sandbox Code Playgroud)

java android serializable parcelable

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