Java对象序列化与Externalizable接口详解

需积分: 9 0 下载量 18 浏览量 更新于2024-08-18 收藏 252KB PPT 举报
"对象序列化的控制是Java输入输出领域中的一个重要话题。对象序列化是将对象的状态转换为字节流的过程,便于存储或网络传输,而反序列化则是将字节流还原为对象。在Java中,我们通常通过实现`Serializable`接口来使一个类支持序列化。然而,除了`Serializable`接口外,还存在`Externalizable`接口,它提供了一种更细粒度的控制方式。 `Serializable`接口是Java中默认的序列化机制,当一个对象实现了这个接口,Java的序列化机制会自动处理对象的序列化和反序列化过程。在序列化过程中,会调用对象的所有`transient`和`static`字段之外的字段,将其状态保存到字节流中;在反序列化时,不会调用任何构造函数,而是直接根据字节流中的数据恢复对象状态。 相反,`Externalizable`接口提供了对序列化过程的自定义控制。它也继承自`Serializable`,但要求实现者提供`writeExternal`和`readExternal`两个方法。在序列化时,系统会调用`writeExternal`方法,允许开发者决定如何将对象状态写入输出流;在反序列化时,首先会调用默认构造器(如果有的话),然后执行`readExternal`方法,由开发者自行恢复对象状态。这种方式更灵活,但也要求开发者对对象的序列化和反序列化逻辑有深入理解。 文件系统和文件路径是Java I/O的基础。文件系统是用于在存储介质上组织和管理文件的方式,常见的如Windows的NTFS、FAT和Linux的EXT系列。文件路径是定位文件的关键,它可以是绝对路径(如"/home/sally/statusReport"或"C:\home\sally\statusReport"),也可以是相对路径。在Linux和Windows中,路径分隔符有所不同,Linux使用正斜杠`/`,而Windows使用反斜杠`\`。 `File`类是Java中处理文件和目录的主要工具。它可以表示单个文件或目录,并提供了丰富的功能,例如判断是否为目录、获取或设置文件属性(如大小、最后修改时间、读写权限等)、创建或删除目录、列举目录下的文件和子目录等。例如,`DirList3`示例程序展示了如何使用`File`类和`FilenameFilter`接口来过滤并列出指定目录下匹配特定模式的文件。 在实际编程中,`File`类的功能强大且实用,可以进行文件的创建、删除、重命名、移动等操作。同时,对于对象序列化和反序列化的控制,`Externalizable`接口的使用可以满足更复杂的需求,比如避免默认序列化带来的问题,或者在序列化过程中加入加密、压缩等额外步骤。"