Java IO理解:InputStream、FileInputStream与FilterInputStream

需积分: 10 2 下载量 145 浏览量 更新于2024-09-14 收藏 89KB DOC 举报
"io包是Java中用于处理输入输出操作的核心包,包含了众多用于读取和写入数据的类。本文主要探讨io包中常用的几个类,如InputStream、FileInputStream、FilterInputStream以及ObjectInputStream,分析它们的重要方法以及类之间的继承关系。 InputStream作为所有字节输入流的超类,提供了基础的输入流操作。它的关键方法有close(),用于关闭输入流并释放系统资源,以及read(),用于读取单个字节的数据。基于InputStream,FileInputStream实现了从文件中读取字节流的功能,通过FileInputStream(File file)或FileInputStream(String fileName)构造方法指定文件,然后调用close()关闭流,read()读取字节。 FilterInputStream作为InputStream的子类,起到了装饰者模式的作用,可以添加额外功能或修改已有行为。它自身只是简单转发到包含的输入流,但子类可以扩展其功能。FilterInputStream同样提供close()、read()和read(byte[] bytes)等方法。 ObjectInputStream则用于反序列化之前使用ObjectOutputStream序列化的对象。这个类允许应用程序持久保存对象状态,与FileInputStream和FileOutputStream配合时,可以在不同主机间传递对象,或者在网络通信中进行对象的编组和解组。然而,只有实现了Serializable或Externalizable接口的对象才能被反序列化。反序列化过程中,每个字段的值和类型都会恢复到序列化时的状态。 除了上述类,io包中还有许多其他重要的类,如OutputStream用于输出流,BufferedInputStream和BufferedOutputStream用于缓冲数据,DataInputStream和DataOutputStream用于读写基本数据类型,FileReader和FileWriter用于字符流操作,以及Reader和Writer作为所有字符流的基类。 类之间的继承关系构成了一个层次结构,使得不同类型的流可以通过继承共享相同的行为。例如,FileInputStream继承自InputStream,而FilterInputStream又继承自InputStream。这种设计使得开发者可以根据具体需求选择合适的流类型,同时还能利用父类的通用方法,提高了代码的复用性和可扩展性。 理解io包中各个类的作用和方法,以及它们之间的继承关系,对于编写高效的输入输出程序至关重要。通过熟练运用这些类,可以实现对文件、网络、内存等多种数据源的高效读写操作,同时也为对象的序列化和反序列化提供了便利。"