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