InputStream
InputStream
是 Java I/O 中所有输入流的抽象基类,它定义了读取字节流的基本方法。InputStream
类提供了许多子类,用于从不同的数据源读取数据,如文件、网络连接、内存等。
InputStream
提供了以下常用的方法:
int read()
: 从输入流中读取下一个字节的数据。如果已经到达流的末尾,则返回 -1。int read(byte[] b)
: 从输入流中读取一定数量的字节,并将其存储到字节数组b
中。返回实际读取的字节数。int read(byte[] b, int off, int len)
: 从输入流中读取最多len
个字节的数据,并将其存储到从偏移量off
开始的字节数组b
中。返回实际读取的字节数。long skip(long n)
: 跳过并丢弃输入流中的n
个字节数据,并返回实际跳过的字节数。int available()
: 返回可以从输入流中读取而不被阻塞的字节数。void close()
: 关闭输入流并释放与之关联的系统资源。
InputStream
是一个抽象类,不能直接实例化,通常通过其具体的子类来实现不同的输入流功能,如 FileInputStream
、ByteArrayInputStream
、BufferedInputStream
等
1 ByteArrayInputStream:这个类允许将内存中的字节数组作为输入流来处理。它的构造函数接受一个字节数组作为参数,并可以从该数组中读取数据。它通常用于在内存中处理二进制数据,比如处理内存中的图片数据或者处理网络数据。
byte[] byteArray = { 1, 2, 3, 4, 5 };
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
2 FileInputStream:这个类用于从文件系统中读取数据。它的构造函数接受一个文件路径作为参数,然后可以从该文件中读取数据。它通常用于读取文件内容,比如读取文本文件、图片文件等。
FileInputStream fileInputStream = new FileInputStream("example.txt");
3 FilterInputStream:这个类是一个抽象类,它提供了对输入流的过滤功能。它本身并不能直接创建实例,而是通过其子类来实现具体的功能。常用的子类包括 BufferedInputStream、DataInputStream 等,它们可以在输入流的基础上添加缓冲、数据格式化等功能。
InputStream inputStream = new FileInputStream("example.txt");
FilterInputStream filterInputStream = new BufferedInputStream(inputStream);
4 ObjectInputStream:用于从输入流中读取 Java 对象。它可以读取通过 ObjectOutputStream 写入的对象,并将它们还原为内存中的对象实例。
FileInputStream fileInputStream = new FileInputStream("object.dat");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
5 PipedInputStream:通过管道进行线程间通信时,可用于接收来自管道输出流的数据。通常与 PipedOutputStream 一起使用。
PipedOutputStream pipedOutputStream = new PipedOutputStream();
PipedInputStream pipedInputStream = new PipedInputStream(pipedOutputStream);
6 SequenceInputStream:用于将多个输入流串联起来,形成一个顺序读取的输入流。它接受两个输入流作为参数,在读取时先从第一个输入流读取数据,当第一个输入流读取结束后再从第二个输入流读取数据,依次类推。
FileInputStream fileInputStream1 = new FileInputStream("file1.txt");
FileInputStream fileInputStream2 = new FileInputStream("file2.txt");
SequenceInputStream sequenceInputStream = new SequenceInputStream(fileInputStream1, fileInputStream2);
7 StringBufferInputStream:已过时的类,用于将字符串转换为输入流。它将一个字符串转换为字节流,但由于它使用的是默认的字符编码,因此可能导致在处理非 ASCII 字符时出现问题。建议使用 ByteArrayInputStream 或 ByteArrayInputStream 代替。
StringBufferInputStream stringBufferInputStream = new StringBufferInputStream("Hello, world!");