当前位置: 首页 > 面试题库 >

存储在文件中的序列化对象不可读

叶经略
2023-03-14
问题内容

问题是,当我将序列化对象存储在.txt文件中时,它的格式不是可读的,并且包含一些随机的符号和字母。首先,我想知道其背后的原因是什么,然后如何解决此问题。

好了,这是我的代码:我要序列化的对象

package serialized;

import java.io.Serializable;
import javax.swing.JOptionPane;

public class Student implements Serializable {

private static final long serialVersionUID = 1L;
String s_name;
int roll_no;

public Student(String s_name, int roll_no){
    this.s_name=s_name;
    this.roll_no=roll_no;
}

public void getInfo(){
    JOptionPane.showMessageDialog(null, "Name: "+s_name+" Roll No: " + roll_no);
}
}

序列化

package serialized;
import java.io.*;
public class StudentWriter {

public static void main(String[] args) {
    Student s1=new Student("Asiya", 58);
    try{

        FileOutputStream fos=new FileOutputStream("abc.txt");
        ObjectOutputStream oos=new ObjectOutputStream(fos);

        // Writing Object Info to File
        oos.writeObject(s1);
        System.out.println("Data has been written to file");
        oos.close();
        fos.close();

    }catch(Exception e){
        e.printStackTrace();
    }

}

}

反序列化

package serialized;
import java.io.*;
public class StudentReader {

public static void main(String[] args) {

    try{
        FileInputStream fis=new FileInputStream("abc.txt");
        ObjectInputStream ois=new ObjectInputStream(fis);

        // Reading Data from File
        Student s_data=(Student)ois.readObject();
        System.out.println("Data has been read");
        s_data.getInfo();

        ois.close();
        fis.close();

    }catch(Exception e){
        e.printStackTrace();
    }

}

}

输出:

 ’ sr serialized.Student        I roll_noL s_namet Ljava/lang/String;xp   :t      Asiya

问题答案:

存储在文件中的序列化对象不可读

除了通过反序列化之外,它们并不可读。

问题是,当我将序列化对象存储在.txt文件中时,它的格式不是可读的,并且包含一些随机的符号和字母。

那不是问题。唯一的问题是您放错了对它应该易于理解的期望。没有任何规范说明。

首先,我想知道背后的原因是什么

它在对象序列化流协议中指定。

然后如何解决这个问题。

什么问题?您的代码正常工作。弹出的对话框中的输出StudentReader正确:

Name: Asiya Roll No: 58

您在这里所做的 明确 工作是直接使用某些实用程序查看序列化文件,而不是运行StudentReader程序。

这里没有问题可以解决。

注意:

  1. 关闭对象流将关闭基础文件流。您不需要自己关闭文件流。
  2. 序列化的对象不是文本,因此不应保存在.txt文件中。


 类似资料:
  • 我正在使用Apache Flink对流数据执行分析。 我正在使用一个依赖项,其对象需要超过10秒才能创建,因为它在初始化之前读取hdfs中存在的几个文件。 如果我在open方法中初始化对象,我会得到一个超时异常,如果在接收器/平面图的构造函数中,我会得到序列化异常。 目前,我正在使用静态块来初始化其他类中的对象,使用前提条件。在主文件中选中NOTNULL(mgGenerator.mgGenerat

  • 我正在试验Stanford CoreNLP库,我想序列化主要的StanfordCoreNLP管道对象,尽管它抛出了一个java.io.NotSerializableException。 完整故事:每当我运行我的实现时,将管道注释器和分类器加载到内存中大约需要15秒。最终进程的内存约为600MB(很容易小到可以存储在我的机箱中)。我想在第一次创建管道后保存它,这样我就可以在以后将其读入内存。 然而,

  • 我目前正在尝试扩展一个使用Scala和Spark的机器学习应用程序。我正在使用我在Github上找到的Dieterich Lawson之前项目的结构 https://github.com/dieterichlawson/admm 该项目基本上使用SparkContext来构建训练样本块的RDD,然后对每个样本集执行局部计算(例如求解线性系统)。 我遵循同样的方案,但为了进行局部计算,我需要对每个训

  • 我有以下用于序列化查询集的代码: 下面是我的 我需要将其序列化。但它说无法序列化

  • 本文向大家介绍java 中Spark中将对象序列化存储到hdfs,包括了java 中Spark中将对象序列化存储到hdfs的使用技巧和注意事项,需要的朋友参考一下 java 中Spark中将对象序列化存储到hdfs 摘要: Spark应用中经常会遇到这样一个需求: 需要将JAVA对象序列化并存储到HDFS, 尤其是利用MLlib计算出来的一些模型, 存储到hdfs以便模型可以反复利用. 下面的例子

  • 我的问题是,有什么方法可以让我序列化/反序列化一个名为onlinePlayers的列表,该列表引用了“John1”的实例,它也碰巧在List allPlayers中,而不重复“John1”,同时仍然引用那个对象? 我猜当我反序列化allPlayers时,它将创建不同于原始对象的对象,所以onlinePlayers在反序列化后不可能仍然引用相同的对象。我是否应该编写一个自定义方法,在反序列化后将新创