【问题标题】:File extension for a Serialized object序列化对象的文件扩展名
【发布时间】:2012-05-13 01:49:59
【问题描述】:

Serializable 对象保存到磁盘时最合适的文件扩展名是什么?

FileOutputStream fos = null;
ObjectOutputStream out = null;
try {
    fos = new FileOutputStream(filename);
    out = new ObjectOutputStream(fos);
    out.writeObject(mySerializableObject);
} catch (IOException ex) {
    ex.printStackTrace();
} finally {
    IOUtils.closeQuietly(out);
}

【问题讨论】:

  • 我现在正在考虑 .ser 但不是 100%

标签: java serialization filenames serializable


【解决方案1】:

“.ser”是文件后缀的合理选择——http://www.file-extensions.org/ser-file-extension

但是,您可能会争辩说,您使用什么后缀没有什么区别...只要不与其他常用的应用程序后缀发生冲突。

Java 序列化对象文件只能由在其类路径上具有相关类的 Java 应用程序读取(以正常方式)。一刀切的“.ser”后缀没有提供关于这些类可能是什么以及应用程序启动框架应该在哪里找到它们的任何线索。因此,您将无法设置 Windows 样式的文件关联来提供双击应用程序启动。


有什么方法可以查看或编辑“.ser”文件??

可能,但难度很大,而且只有在某些条件下。

文件的内容将高度依赖于被序列化的类。现在可以确定该类的名称,以及(在某些情况下)序列化字段的名称和类型。但是,如果该类使用自定义序列化/外部化,则表示将是二进制数据的不透明 blob,文件中没有关于如何解码的线索。不透明 blob 问题相当普遍,因为 Java SE 类库中的许多重要类都使用自定义序列化......为了提高效率......许多应用程序类也是如此。

另一种可能的方法是找到 .ser 文件中提到的所有类的 .class 文件,反序列化为对象,并使用反射来访问反序列化对象的字段。你甚至可以调整它们并重新序列化它们。但是,如果您没有所有 .class 文件的正确版本,那么这不是首发。

最后,使用二进制编辑器编辑“.ser”文件在技术上是可行的,但会很危险。序列化格式不是为支持这一点而设计的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    相关资源
    最近更新 更多