标签: serializable

添加方法会改变我的类中的java计算的serialVersionUid吗?

如果我有这样的课程:

public class Name implements Serializable {
    private final String firstName;
    private final String lastName;

    public Name(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我添加另一个方法(并没有其他字段),它的计算的serialVersionUID会改变吗?

例如,添加方法:

public String getFullName() {
    return firstName + " " + lastName;
}
Run Code Online (Sandbox Code Playgroud)

或者,是否有一个很好的工具来解决这个问题?

java serialization serializable serialversionuid

4
推荐指数
1
解决办法
2273
查看次数

意图中的可序列化对象以String形式返回

在我的应用程序中,我试图通过意图将可序列化对象传递给另一个活动.意图并非完全由我创建,它是通过搜索建议创建和传递的.

在搜索建议的内容提供程序中,创建对象并将其放置在SUGGEST_COLUMN_INTENT_EXTRA_DATAMatrixCursor 的列中.但是,在我调用的接收活动中getIntent().getSerializableExtra(SearchManager.EXTRA_DATA_KEY),返回的对象是String类型,我无法将其强制转换为原始对象类.

我尝试为我的对象制作一个parcelable包装器,调用out.writeSerializable(...)并使用它,但同样的事情发生了.

返回的字符串就像一个通用的Object toString(),即com.foo.yak.MyAwesomeClass@4350058,所以我假设toString()被调用到我无法控制的地方.

希望我只是遗漏了一些简单的东西.谢谢您的帮助!

编辑:我的一些代码

这是在充当搜索权限的内容提供者中:

//These are the search suggestion columns 
private static final String[] COLUMNS = {
    "_id",  // mandatory column
    SearchManager.SUGGEST_COLUMN_TEXT_1,
    SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA
};

//This places the serializable or parcelable object (and other info) into the search suggestion
private Cursor getSuggestions(String query, String[] projection) {
    List<Widget> widgets = WidgetLoader.getMatches(query);

    MatrixCursor cursor = new MatrixCursor(COLUMNS);
    for (Widget w : widgets) {
        cursor.addRow(new Object[] {
                           w.id
                           w.name
                           w.data //This …
Run Code Online (Sandbox Code Playgroud)

search android serializable android-intent

4
推荐指数
1
解决办法
2104
查看次数

在Android中保留Parcelable对象

我在我的Android应用程序中有一个类,我已经制作了Parcelable,以便它可以在活动之间传递.

我希望能够将此对象保存到文件系统.似乎既然我已经实现了Parcelable,那么将它的输出传递给文件系统并稍后再读取是有意义的.

有没有正确的方法来做到这一点?或者,如果我想在活动之间传递对象并将其保存到文件系统,我必须同时实现Parcelable和Serialiazble吗?

java android serializable parcelable

4
推荐指数
1
解决办法
6728
查看次数

序列化和简单地将对象存储在磁盘上有什么区别?

我对此感到困惑。因为在实现 Serializable 类时,我们需要使用类似的类FileOutputStreamObjectOutputStream或者类似的东西。那我们为什么不直接用这些类来做输出对象到文件、从文件输入对象这样的事情,直接维护对象的状态呢?为什么我们要先实现 Serializable 然后再做同样的事情?

java serialization objectoutputstream serializable fileoutputstream

4
推荐指数
1
解决办法
4974
查看次数

JAXB对象没有实现可序列化的后果是什么?

我希望有人可以为我澄清这一点,以便我能更好地理解JAXB对象的编组是如何工作的.

通过阅读和查看示例,我理解JAXB对象必须实现,java.io.Serializable以便可以正确编组和解组对象.我有点不确定的部分是当你的一个JAXB对象没有实现可序列化时会发生什么(读:后果是什么)?这在过去发生过并导致日志文件中的错误类似于

ERROR [example.package.name.MyJaxbClass.data]DiskStorageFactory.call{503} | Disk Write of -309037891 failed: 
java.io.NotSerializableException: example.package.name.myJaxbClass$MyNonSerializedElement
Run Code Online (Sandbox Code Playgroud)

然而其余代码似乎工作正常.您的JAXB类实现可序列化的重要性以及当它们不实现时会发生什么?

java jaxb serializable

4
推荐指数
1
解决办法
1662
查看次数

parcelable遇到ioexception编写可序列化对象.........?

代码

SngList.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView a, View v, int position, long id) {


        Intent intent = new Intent(getActivity(), NowPlaying.class);
        intent.putExtra("Data1",Songinfo);
        intent.putExtra("Data2",position);
        startActivity(intent);

    }
});
Run Code Online (Sandbox Code Playgroud)

接收类中的代码

Intent i = getIntent();
ArrayList<SongDetails> Songinfo2 = (ArrayList<SongDetails>)i.getSerializableExtra("Data1"); 
position=i.getIntExtra("Data2", 1);
Run Code Online (Sandbox Code Playgroud)

songDetials的代码

package sourcecode.jazzplayer;

import java.io.Serializable;

import android.graphics.Bitmap;

public class SongDetails implements Serializable{
    Bitmap icon ;
    String song;
    String Artist; 
    String Album;
    String Path;
   int icLauncher;

    public String getSong() {
        return song;
    }

    public void setSong(String song) {
        this.song = song;
    }

    public String …
Run Code Online (Sandbox Code Playgroud)

android serializable

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

java中序列化的基础知识不明白

我无法理解SerializationJava 1.6 的基础知识.

下面是Dog包含Class的实例变量的CollarClass:

Dog.java

public class Dog implements Serializable {

private Collar collar;

public Collar getCollar() {
    return collar;
}

public void setCollar(Collar collar) {
    this.collar = collar;
}

}
Run Code Online (Sandbox Code Playgroud)

Collar类没有实现Serializable接口,如下所示:

Collar.java

public class Collar {

private int size;

public int getSize() {
    return size;
}

public void setSize(int size) {
    this.size = size;
}

}
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试序列化时,Dog为什么它不抛出NotSerializableException?根据合同,整个对象图应该实现,Serializable但我的Collar班级不满足.

以下是此演示的主要方法:

public static void main(String[] args) …
Run Code Online (Sandbox Code Playgroud)

java serialization servlets web-applications serializable

4
推荐指数
1
解决办法
648
查看次数

ArrayList无法强制转换为自定义类扩展ArrayList

我有下面提到的课程:

public class JsonHistoryList extends ArrayList<JsonHistory> implements Serializable{}
Run Code Online (Sandbox Code Playgroud)

我希望通过意图使用它

timerService.putExtra(TimerService.ACTIVITY_LIST_ARG, activities);
Run Code Online (Sandbox Code Playgroud)

但在我收到它之后(下面的方式)

JsonHistoryList temp = (JsonHistoryList) intent.getSerializableExtra(TimerService.ACTIVITY_LIST_ARG);
Run Code Online (Sandbox Code Playgroud)

在我的服务中它给了我例外:

Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.epstim.captime.jsonmodel.JsonHistoryList
Run Code Online (Sandbox Code Playgroud)

我不明白为什么java无法处理该操作.

我已将服务代码更改为:

ArrayList<JsonHistory> temp = (ArrayList<JsonHistory>) intent.getSerializableExtra(TimerService.ACTIVITY_LIST_ARG);
activities.addAll(temp);
Run Code Online (Sandbox Code Playgroud)

它奏效了.

java android arraylist serializable android-intent

4
推荐指数
1
解决办法
2025
查看次数

使用parceler(@Parcel)和Realm.io(Android)

我有以下代码产生错误: Error:Parceler: Unable to find read/write generator for type io.realm.Realm for io.realm.RealmObject.realm

它没有工作extends RealmObject,但是我想使用Realm轻松地放入数据库.有没有办法驱逐RealmObject字段,只使用@Parcel的基本pojo字段?

@Parcel
public class Feed extends RealmObject{
    int id;
    public String text;
    public String time_created;
    String time_modified;
    int comments_count;
    int likes_count;
    String feed_type;
    int obj_id;
    String image;
    String user_name;
    String user_earthmile_points;
    boolean liked;
    boolean commented;
    boolean is_private;
    String url;
    int feed_creator_id;

   }
Run Code Online (Sandbox Code Playgroud)

android serializable realm parcelable parceler

4
推荐指数
1
解决办法
2784
查看次数

使用匿名函数时Spark TaskNotSerializable

背景

这是我的情况:我正在尝试创建一个基于内容的某些功能过滤RDD的类,但该功能在不同的场景中可能有所不同,所以我想用函数对其进行参数化.不幸的是,我似乎遇到了Scala捕获其闭包的问题.即使我的函数是可序列化的,但类不是.

关闭清洁火花源的例子来看,它似乎表明我的情况无法解决,但我确信有一种方法可以通过创建正确(较小)的闭包来实现我想要做的事情.

我的守则

class MyFilter(getFeature: Element => String, other: NonSerializable) {
  def filter(rdd: RDD[Element]): RDD[Element] = {
    // All my complicated logic I want to share
    rdd.filter { elem => getFeature(elem) == "myTargetString" }     
}
Run Code Online (Sandbox Code Playgroud)

简化示例

class Foo(f: Int => Double, rdd: RDD[Int]) { 
  def go(data: RDD[Int]) = data.map(f) 
}

val works = new Foo(_.toDouble, otherRdd)
works.go(myRdd).collect() // works

val myMap = Map(1 -> 10d)
val complicatedButSerializableFunc: Int => Double = x => myMap.getOrElse(x, 0)
val doesntWork …
Run Code Online (Sandbox Code Playgroud)

closures scala serializable apache-spark

4
推荐指数
1
解决办法
1864
查看次数