Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文件中存储的序列化对象不可读_Java_Serialization - Fatal编程技术网

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

Java 文件中存储的序列化对象不可读,java,serialization,Java,Serialization,问题是,当我将序列化对象存储在.txt文件中时,它不是可读的形式,并且包含一些随机符号和字母。首先我想知道这背后的原因是什么,然后如何解决这个问题 好,下面是我的代码:我想序列化的对象 package serialized; import java.io.Serializable; import javax.swing.JOptionPane; public class Student implements Serializable { private static final long

问题是,当我将序列化对象存储在.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();
    }

}

}
}

反序列化

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
存储在文件中的序列化对象(Java)并不意味着人眼可以读取。如果要读取文件,需要使用Java程序

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

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

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

这不是问题。唯一的问题是你错误地期望它应该是人类可读的。任何地方都没有这样的规范

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

它在中指定

然后如何解决这个问题

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

Name: Asiya Roll No: 58
您在这里所做的是使用一些实用程序直接查看序列化文件,而不是运行
StudentReader
程序

这里没有需要解决的问题

注意:

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

  • 这不是一个Java程序吗?@SyedaNaqvi是的,但你没有运行它,是吗?我已经运行了你的程序。它能够读取存储在文件中的数据。但是,如果您使用记事本或任何其他文本编辑器打开该文件,其内容对人眼来说没有意义。您的程序从文件中读取序列化对象是百分之百正确的。我从来没有说过代码中有错误,我是在问.txt文件,序列化对象存储在哪里。格式不对there@SyedaNaqvi它肯定是“正确的格式”,而您的阅读器代码正确执行的事实证明了这一点。这里唯一的问题是你错误的期望。我不理解-3。。。我只是想知道为什么输出会出现这种情况。对我来说,它工作得很好@是的,我在查txt文件。因为我的任务是:序列化对象应该以正确的格式出现在txt文件中。定义“正确的格式”。如果要求您使用
    序列化
    来生成文本文件,更不用说可读文本文件了,那么您的赋值是完全没有意义的,因为序列化并不是这样做的。如果你被要求查看文本文件,
    StudentReader
    类的目的是什么?这没有道理。你需要回顾一下你的作业实际上说了些什么。正如我已经定义的:作业是指:为什么它在.txt文件中不是人类可读的格式?我无法相信你已经正确地解释了你的作业。请在你的问题中贴出确切的措辞。它不是人类可读的,因为没有任何地方规定它应该是人类可读的。我在回答中提供了一个链接,解释了格式。Ok。我理解。谢谢你的努力。