Java I/O流详解:从InputStream到PrintStream

需积分: 9 1 下载量 153 浏览量 更新于2024-08-23 收藏 122KB PPT 举报
"Java中的InetAddress类用于表示网络上的IP地址,它是一个final类并实现了Serializable接口。InetAddress由两部分组成:hostName(字符串类型)代表主机名,address(整型)代表IP地址。此外,文件还提到了Java的I/O流系统,包括字节流和字符流的概念,以及OutputStream类在输出流中的核心方法,如write、flush和close。OutputStream可以通过装饰模式与其他类结合,如FileOutputStream、BufferedOutputStream和PrintStream,以增强功能和控制数据输出。" 在Java中,InetAddress类是处理网络地址的核心类。它提供了获取和解析IP地址的方法,使得开发者能够在网络编程中与远程主机进行交互。hostName是主机的名称,便于人类识别,而address则是IP地址的数值表示,通常为IPv4或IPv6的数字形式。通过InetAddress,我们可以执行以下操作: 1. 获取本地主机的IP地址:`InetAddress.getLocalHost()` 返回当前设备的IP地址。 2. 获取指定主机名的IP地址:`InetAddress.getByName(String host)` 通过主机名查找对应的IP地址。 3. 解析IP地址:`InetAddress.getByAddress(byte[] addr)` 将字节数组形式的IP地址转换为InetAddress对象。 转向Java的I/O流系统,Java提供了字节流和字符流来处理输入和输出。字节流以字节为单位进行数据传输,适用于所有类型的原始数据;字符流以字符为单位,适合处理文本数据。InputStream和OutputStream作为字节流的基类,分别用于输入和输出;Reader和Writer作为字符流的基类,也有同样的功能。这些基类都是抽象类,实际使用时通常会使用它们的子类,如FileInputStream、FileOutputStream、BufferedReader和BufferedWriter。 OutputStream类提供了基本的字节输出功能,如write方法用于写入单个字节或字节数组,flush方法清空缓冲区并确保数据被立即写入,而close方法关闭流并释放资源。为了增强OutputStream的功能,可以使用装饰器模式添加额外的行为,例如: - FileOutputStream将输出流与文件关联,允许直接向文件写入数据。 - BufferedOutputStream引入了缓冲机制,提高性能,减少物理磁盘的读写次数。 - PrintStream则提供格式化输出的能力,如打印错误信息、换行等,并且可以直接处理异常,防止程序因IO问题而崩溃。 在示例代码中,通过一系列装饰,System.out被重定向到一个名为"out.txt"的文件中,首先创建FileOutputStream指向文件,然后使用BufferedOutputStream增加缓冲功能,最后用PrintStream实现格式化输出。这样,所有的标准输出都将被记录到文件中。