深入理解Java I/O流:InputStream与OutputStream详解

需积分: 44 21 下载量 27 浏览量 更新于2024-09-08 1 收藏 15KB TXT 举报
本文将深入解析Java中的两个核心流类:InputStream和OutputStream。这两个类是处理输入/输出操作的基础,尤其在Android等平台的开发中扮演着重要角色。本文会详细讲解它们的主要方法、功能和使用场景。 1. InputStream: InputStream是Java中用于读取数据的基本抽象类。它提供了一系列方法,用于从字节源获取数据: - `int read()`:从输入流中读取一个字节,返回值范围是0到255,表示ASCII字符,-1表示已到达流的末尾。 - `int read(byte b[])`:一次性读取字节数组,返回实际读取的字节数,范围是0到数组长度,-1表示已到达末尾。 - `int read(byte b[], int off, int len)`:从指定偏移量开始读取指定长度的数据到数组中,返回实际读取的字节数,范围是0到len,-1表示已到达末尾。 - `int available()`:返回可立即读取的字节数,用于预估剩余数据量。 - `long skip(long n)`:跳过流中的n个字节,不返回任何数据,仅移动字节指针。 - `close()`:关闭输入流,释放系统资源。 - `void mark(int readlimit)`:设置一个标记位置,用于重定位读取指针,但需要调用`reset()`才能恢复。 - `void reset()`:如果之前调用了`mark()`,则将读取指针重置到标记位置。 - `boolean markSupported()`:检查当前流是否支持标记。 2. OutputStream: OutputStream是Java用于向输出流写入数据的抽象基类,方法包括: - `void write(int b)`:写入一个字节到流中。 - `void write(byte b[])`:写入整个字节数组。 - `void write(byte b[], int off, int len)`:从指定偏移量开始写入字节数组,写入指定长度。 - `void flush()`:强制刷新输出流,确保已写入的数据被发送到目标,如文件或网络连接。 - `close()`:关闭输出流,停止数据写入并释放资源。 3. I/O异常处理: 在进行I/O操作时,可能会遇到各种异常,如FileNotFoundException(找不到文件)、EOFException(到达文件末尾)和IOException(I/O错误)。开发者需捕获并处理这些异常以保证程序的健壮性。 4. 文件和目录操作: Java I/O API提供了多种类来处理文件和目录,如File类用于表示文件和目录,FileInputStream和FileOutputStream用于与文件交互,RandomAccessFile提供随机访问功能,FileDescriptor底层代表一个文件描述符。此外,还可以使用FilenameFilter筛选文件名。 5. File类方法: File类包含一系列方法,如路径操作(getPath(), getAbsolutePath(), getParent()),文件或目录的存在性检查(exists()),重命名(renameTo())等。 总结,InputStream和OutputStream是Java I/O操作的核心组件,理解它们的用法和特性至关重要。掌握这些概念,有助于开发者更有效地在Android或其他Java项目中处理文件输入输出,同时处理可能出现的异常,提高代码的稳定性和效率。