将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);
}
答案 0 :(得分:33)
“。ser”是文件后缀http://www.file-extensions.org/ser-file-extension
的合理选择但是,你可以争辩说,你使用的后缀几乎没有什么区别......只要它不会与其他常用的应用程序后缀冲突。
Java序列化目标文件只能由(在正常方式下)由在其类路径上具有相关类的Java应用程序读取。一个通用的“.ser”后缀没有提供关于这些类可能是什么以及应用程序启动框架应该在哪里找到它们的线索。因此,您将无法设置Windows样式的文件关联以提供双击应用程序启动。
有没有办法可以查看或编辑ser文件?
可能,但很困难,而且只在某些条件下。
文件高度依赖于序列化的类的内容。现在可以确定该类的名称,以及(在某些情况下)序列化字段的名称和类型。但是,如果类使用自定义序列化/外化,则表示将是一个不透明的二进制数据blob,文件中没有关于如何解码它的线索。不透明的blob问题相当普遍,因为Java SE类库中的许多重要类都使用自定义序列化...以提高效率......许多应用程序类也是如此。
另一种可能的方法是找到.ser文件中提到的所有类的.class文件,反序列化为对象,并使用反射来访问反序列化对象的字段。你甚至可以调整它们并将它们重新序列化。但是,如果您没有所有.class文件的正确版本,那么这是一个非启动器。