字节输入流(InputStream)用于从外部源(如文件、网络等)读取数据。它是一个抽象类,具体的实现类包括文件输入流(FileInputStream)、字节数组输入流(ByteArrayInputStream)等。
read()
:从输入流中读取下一个字节的数据并返回。
InputStream inputStream = new FileInputStream("example.txt"); int data = inputStream.read(); // 读取单个字节数据 while (data != -1) { System.out.print((char) data); // 输出读取到的字节转换为字符 data = inputStream.read(); // 继续读取下一个字节数据 } inputStream.close(); // 关闭输入流
read(byte[] b)
:从输入流中将数据读入到字节数组中,并返回读取的字节数。
InputStream inputStream = new FileInputStream("example.txt"); byte[] data = new byte[1024]; // 缓冲区大小 int bytesRead = inputStream.read(data); // 读取字节数组数据 while (bytesRead != -1) { // 处理读取到的数据 System.out.write(data, 0, bytesRead); // 将字节数组数据输出到控制台 bytesRead = inputStream.read(data); // 继续读取字节数组数据 } inputStream.close(); // 关闭输入流
available()
:获取输入流中可读取的字节数。
InputStream inputStream = new FileInputStream("example.txt"); int availableBytes = inputStream.available(); // 获取可读取的字节数 byte[] data = new byte[availableBytes]; inputStream.read(data); // 读取可用字节数组数据 inputStream.close(); // 关闭输入流
skip(long n)
:跳过输入流中的 n 个字节的数据。
InputStream inputStream = new FileInputStream("example.txt"); inputStream.skip(5); // 跳过前5个字节数据 int data = inputStream.read(); // 读取跳过后的下一个字节 inputStream.close(); // 关闭输入流
当使用字节输入流(InputStream)时,有一些细节需要注意:
- 读取的数据类型: 字节输入流以字节为单位进行读取,读取的数据类型是int。即使实际上我们可能只需要读取字符数据,仍然会返回一个int值,表示读取到的字节。如果需要将其转换为字符,可以使用
(char)
进行强制类型转换。 - 读取结束的标识: 当读取到达文件末尾时,
read()
方法将返回-1,表示没有更多的字节可读。 - 缓冲区: 在使用
read(byte[] b)
方法读取数据时,通常会创建一个字节数组作为缓冲区。缓冲区的大小可以根据需要进行调整。较大的缓冲区可以提高读取效率,但也会占用更多的内存空间。 - 输入流关闭: 使用完毕后,必须显式地调用
close()
方法来关闭输入流,释放相应的资源。关闭输入流是一个良好的编程习惯,可以避免资源泄漏和占用过多的系统资源。 - 异常处理: 在使用字节输入流时,可能会抛出
IOException
及其子类的异常。对于这些异常,建议使用try-catch语句进行捕获和处理,以确保程序的健壮性。