You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在文本编辑器中读取Java ObjectOutputStream生成的序列化文件?

为什么ObjectOutputStream生成的文件在文本编辑器里不可读?怎么解决?

嘿,这个问题其实挺常见的——先给你把本质说清楚:ObjectOutputStream写出的是Java专用的二进制序列化数据,它的设计目标是让Java程序能高效还原对象,而不是生成人类可读的文本内容。所以你用文本编辑器打开看到一堆乱码/十六进制字符,完全是正常现象,不是你代码写错了。

那如果想在文本编辑器里查看文件内容,有这几个可行的办法:

1. 改用可读的序列化格式(推荐)

放弃Java原生的二进制序列化,把对象转换成JSON、XML这类通用的可读格式。比如用Gson或者Jackson库来实现,举个Gson的例子:

import com.google.gson.Gson;
import java.io.FileWriter;
import java.io.IOException;

public class Employee {
    public String name;
    public void mailCheck() {
        System.out.println("Mailing a check to " + name);
    }
}

public class JsonSerializeDemo {
    public static void main(String [] args) {
        Employee e = new Employee();
        e.name = "Reyan Ali";
        Gson gson = new Gson();
        String json = gson.toJson(e);
        
        try (FileWriter writer = new FileWriter("C:/Users/123/Documents/record.json")) {
            writer.write(json);
            System.out.printf("Serialized data (JSON) is saved.");
        } catch (IOException i) {
            i.printStackTrace();
        }
    }
}

这样生成的record.json文件用文本编辑器打开就是清晰的JSON内容:{"name":"Reyan Ali"},完全可读。

2. 写一个小工具解析二进制序列化文件

如果必须保留Java原生序列化的文件,你可以写一个简单的工具类,读取序列化文件后把对象的属性输出成可读文本,甚至写入到一个文本文件里:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.FileWriter;

public class SerializedFileReader {
    public static void main(String[] args) {
        try (FileInputStream fileIn = new FileInputStream("C:/Users/123/Documents/record.ser");
             ObjectInputStream in = new ObjectInputStream(fileIn)) {
            Employee e = (Employee) in.readObject();
            // 直接打印到控制台,或者写入文本文件
            System.out.println("Employee name: " + e.name);
            
            // 写入到文本文件的示例
            try (FileWriter writer = new FileWriter("C:/Users/123/Documents/record.txt")) {
                writer.write("Employee name: " + e.name);
            }
        } catch (IOException | ClassNotFoundException i) {
            i.printStackTrace();
        }
    }
}

运行这个程序后,record.txt就是你能在文本编辑器里直接查看的内容了。

3. 使用专门的Java序列化查看工具

有些工具可以直接解析Java二进制序列化文件并展示可读内容:

  • IDE插件:比如IntelliJ IDEA的Serializable Inspector插件,安装后可以直接打开.ser文件查看对象的属性和值。
  • 第三方命令行工具:比如SerializationDumper,可以把序列化的二进制数据解析成结构化的文本输出。

总结一下:Java原生序列化本来就不是给人读的,所以要么换成可读格式,要么写工具解析,要么用专用工具查看。你的代码本身是没问题的,只是误解了序列化文件的用途~

内容的提问来源于stack exchange,提问作者DevNadim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:44:12