返回

字节输入流顶级父类InputStream

后端

对于任何编程语言来说,文件读写都是一个基本的功能。在Java中,我们使用IO流来完成这项工作。字节输入流是Java IO中的一种重要流类型,它允许我们从各种来源读取字节数据,例如文件、网络连接或内存缓冲区。

InputStream的基本操作

InputStream定义了几个基本操作来读取字节数据:

  • read():从流中读取一个字节并返回。如果流中没有更多字节可读,则返回-1。
  • read(byte[] b):从流中读取多个字节到字节数组b中。返回读取的字节数,如果流中没有更多字节可读,则返回-1。
  • skip(long n):跳过流中的n个字节。返回实际跳过的字节数,如果流中没有更多字节可跳过,则返回0。
  • mark(int readlimit):在流中设置一个标记。稍后,可以使用reset()方法重置流到该标记。
  • reset():将流重置到上一次设置标记的位置。
  • close():关闭流并释放所有资源。

InputStream的子类

InputStream有几个重要的子类,每个子类都提供不同的功能:

  • FileInputStream:从文件中读取字节数据。
  • ByteArrayInputStream:从字节数组中读取字节数据。
  • StringBufferInputStream:从字符串缓冲区中读取字节数据。
  • FilterInputStream:包装另一个输入流,并向其添加额外的功能,例如缓存或加密。

使用InputStream的示例

以下是一个使用FileInputStream读取文件内容的示例:

import java.io.FileInputStream;
import java.io.IOException;

public class ReadFile {

    public static void main(String[] args) {
        try {
            // 创建一个FileInputStream对象,并将其与文件相关联
            FileInputStream fis = new FileInputStream("myfile.txt");

            // 从文件中读取字节数据
            byte[] data = new byte[1024];
            int numBytesRead = 0;
            while ((numBytesRead = fis.read(data)) != -1) {
                // 将字节数据转换成字符串
                String str = new String(data, 0, numBytesRead);

                // 打印字符串
                System.out.println(str);
            }

            // 关闭FileInputStream对象
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结论

InputStream是Java IO中字节输入流的顶级父类。它提供了读取字节数据、标记和重置流、关闭流等基本操作。InputStream有几个重要的子类,每个子类都提供不同的功能。我们可以在各种场景中使用InputStream及其子类来读取字节数据,例如从文件、网络连接或内存缓冲区中读取数据。