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