Java BufferedInputStream

原文:https://www.studytonight.com/java-file-io/java-bufferedinputstream

在本教程中,我们将学习 Java 中的BufferedInputStream 类。Java 使用 BufferedInputStream 类从文件中读取数据,这个类使用缓冲区,因此速度更快,效率更高。当我们创建一个 BufferedInputStream 类的对象时,这会创建一个内部缓冲区数组。

句法

下面的代码是扩展FilterInputStreamBufferedInputStream类声明。

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 类的对象时,这会创建一个内部缓冲区数组。因为我们在这个类中使用了缓冲区,所以它比其他方法快得多。