Java BufferedInputStream
原文:https://www.studytonight.com/java-file-io/java-bufferedinputstream
在本教程中,我们将学习 Java 中的BufferedInputStream
类。Java 使用 BufferedInputStream 类从文件中读取数据,这个类使用缓冲区,因此速度更快,效率更高。当我们创建一个 BufferedInputStream 类的对象时,这会创建一个内部缓冲区数组。
句法
下面的代码是扩展FilterInputStream
的BufferedInputStream
类声明。
public class BufferedInputStream extends FilterInputStream
Java BufferedInputStream 构造器
BufferedInputStream
类有两个重载构造器,如下表所示。
构造器 | 描述 |
---|---|
BufferedInputStream(InputStream in) |
它创建一个BufferedInputStream 并保存它的参数,输入流in ,以备后用。 |
BufferedInputStream(InputStream in, int size) |
它用指定的缓冲区大小创建一个BufferedInputStream ,并保存它的参数,输入流in ,以备后用。 |
Java BufferedInputStream
方法
下表显示了 BufferedInputStream 类支持的不同方法及其用途。
方法 | 描述 |
---|---|
int available() |
此方法返回可以从输入流中读取的估计字节数,而不会被输入流的下一个调用方法阻塞。 |
int read() |
这个方法从输入流中读取下一个字节的数据。 |
int read(byte[] b, int off, int ln) |
此方法从给定的偏移量开始,将指定字节输入流中的字节读入指定的字节数组。 |
void close() |
此方法关闭输入流并释放与该流关联的任何系统资源。 |
void reset() |
此方法将流重新定位在此输入流上最后一次调用 mark 方法的位置。 |
void mark(int readlimit) |
此方法查看输入流的 mark 方法的一般约定。 |
long skip(long x) |
此方法跳过并丢弃输入流中的 x 字节数据。 |
boolean markSupported() |
| 该方法测试输入流是否支持标记和重置方法。 |
|
使用read()
方法的 Java BufferedInputStream 示例
在下面给出的程序中,我们从文件中读取数据,为了从文件中读取数据,我们创建了一个 FileInputStream 的对象,并将这个对象传递给 BufferedInputStream 类的构造器。使用BufferedInputStream
类的read()
方法,我们逐个字符地读取每个字符,直到文件结束。文件的结尾将相当于 -1
。
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class StudyTonight
{
public static void main(String[] args) throws IOException
{
try
{
FileInputStream fin=new FileInputStream("E:\\studytonight\\myfile.txt");
BufferedInputStream in=new BufferedInputStream(fin);
int i;
while((i=in.read())!=-1)
{
System.out.print((char)i);
}
in.close();
fin.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
你好,今晚学习。
在上例中,我们学习了read()
方法如何从文件中读取内容。现在我们将学习 skip()方法。
使用skip()
方法的 Java BufferedInputStream 示例
当从文件中读取数据时,我们可以使用skip()
方法跳过初始字节,该方法将一个参数作为要跳过的字节数。
在下面的程序中,我们调用了方法skip(5)
,所以它将跳过myfile.txt
文件中的第一个5
字节。
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class StudyTonight
{
public static void main(String[] args) throws IOException
{
FileInputStream file = new FileInputStream("E:\\studytonight\\myfile.txt");
BufferedInputStream buffer = new BufferedInputStream(file);
// Skips for the 5 bytes
buffer.skip(5);
int i = buffer.read();
while (i != -1) {
System.out.print((char) i);
i = buffer.read();
}
buffer.close();
}
}
FGHIJKL 你好今晚学习 Hwllo World 1234567890
myfile.txt: 这是上面例子中用来读取的文件。
ABCDEFGHIJKL
Hello Studytonight
Hwllo World
1234567890
使用available()
方法的 Java BufferedInputStream 示例
在下面的例子中,我们使用 available()
方法从文件中获取可读取的字节。由于给定文件myfile.txt
包含 20 个字节用于读取,因此它将输出 20 个字节。
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class StudyTonight
{
public static void main(String[] args) throws IOException
{
FileInputStream file = new FileInputStream("E:\\studytonight\\myfile.txt");
BufferedInputStream buffer = new BufferedInputStream(file);
System.out.println("Total bytes available at beginning " + buffer.available());
buffer.close();
}
}
从 20 开始的可用字节总数
myfile.txt: 这是上面例子中用来读取的文件。
Hello Studytonight
结论
在本教程中,我们学习了如何使用 BufferedInputStream 类从文件中读取数据。当我们创建BufferedInputStream
类的对象时,这会创建一个内部缓冲区数组。因为我们在这个类中使用了缓冲区,所以它比其他方法快得多。