Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊(duì)列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java BufferedInputStream 類

在本教程中,我們將借助示例學(xué)習(xí)Java BufferedInputStream及其方法。

java.io包的BufferedInputStream類與其他輸入流一起使用,以更有效地讀取數(shù)據(jù)(以字節(jié)為單位)。

它繼承了InputStream抽象類。

BufferedInputStream類是Java InputStream的子類。

BufferedInputStream的工作原理

BufferedInputStream維護(hù)一個(gè)8192字節(jié)的內(nèi)部緩沖區(qū)。

在BufferedInputStream中進(jìn)行讀取操作期間,會從磁盤讀取一部分字節(jié)并將其存儲在內(nèi)部緩沖區(qū)中。 并從內(nèi)部緩沖區(qū)中逐個(gè)讀取字節(jié)。

因此,減少了與磁盤的通信次數(shù)。這就是為什么使用BufferedInputStream讀取字節(jié)更快。

創(chuàng)建一個(gè)BufferedInputStream

為了創(chuàng)建一個(gè)BufferedInputStream,我們必須首先導(dǎo)入java.io.BufferedInputStream包。導(dǎo)入包后,便可以在此處創(chuàng)建輸入流。

//創(chuàng)建一個(gè)FileInputStream
FileInputStream file = new FileInputStream(String path);

//創(chuàng)建一個(gè)BufferedInputStream
BufferedInputStream buffer = new BufferInputStream(file);

在上面的示例中,我們創(chuàng)建了一個(gè)名為BufferdInputStream的buffer,并使用名為file的FileInputStream創(chuàng)建了一個(gè)文件。

在此,內(nèi)部緩沖區(qū)的默認(rèn)大小為8192字節(jié)。但是,我們也可以指定內(nèi)部緩沖區(qū)的大小。

//創(chuàng)建一個(gè)具有指定大小的內(nèi)部緩沖區(qū)的BufferedInputStream
BufferedInputStream buffer = new BufferInputStream(file, int size);

buffer將有助于更快地從文件讀取字節(jié)。

BufferedInputStream的方法

BufferedInputStream類為InputStream類中提供的不同方法提供實(shí)現(xiàn)。

read()方法

  • read() - 從輸入流中讀取一個(gè)字節(jié)

  • read(byte[] arr) - 從流中讀取字節(jié)并存儲在指定的數(shù)組中

  • read(byte[] arr, int start, int length) - 從流中讀取等于length的字節(jié)數(shù),并從位置start開始存儲在指定的數(shù)組中

假設(shè)我們有一個(gè)名為input.txt的文件,其中包含以下內(nèi)容。

This is a line of text inside the file.

讓我們嘗試使用讀取文件BufferedInputStream。

import java.io.BufferedInputStream;
import java.io.FileInputStream;

class Main {
    public static void main(String[] args) {
        try {

            //創(chuàng)建一個(gè)FileInputStream
            FileInputStream file = new FileInputStream("input.txt");

            //創(chuàng)建一個(gè)BufferedInputStream
            BufferedInputStream input = new BufferedInputStream(file);

            //從文件中讀取第一個(gè)字節(jié)
            int i = input .read();

            while (i != -1) {
                System.out.print((char) i);

                //從文件中讀取下一個(gè)字節(jié)
                i = input.read();
            }
            input.close();
        }

        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

輸出結(jié)果

This is a line of text inside the file.

在上面的示例中,我們創(chuàng)建了一個(gè)名為buffer的緩沖輸入流和FileInputStream。輸入流與文件input.txt鏈接。

FileInputStream file = new FileInputStream("input.txt");
BufferedInputStream buffer = new BufferedInputStream(file);

在這里,我們使用了read()方法從緩沖讀取器的內(nèi)部緩沖區(qū)讀取字節(jié)數(shù)組。

available()方法

要獲取輸入流中可用字節(jié)的數(shù)量,我們可以使用available()方法。例如,

import java.io.FileInputStream;
import java.io.BufferedInputStream;

public class Main {

   public static void main(String args[]) {

      try {

        //假設(shè)input.txt文件包含以下文本
        //這是文件中的一行文本。
         FileInputStream file = new FileInputStream("input.txt");
         
         //創(chuàng)建一個(gè)BufferedInputStream
         BufferedInputStream buffer = new BufferedInputStream(file);

         //返回可用的字節(jié)數(shù)
         System.out.println("開始時(shí)可用的字節(jié)數(shù): " + buffer.available());

         //從文件中讀取字節(jié)
         buffer.read();
         buffer.read();
         buffer.read();

         //返回可用的字節(jié)數(shù)
         System.out.println("結(jié)束時(shí)的可用字節(jié)數(shù): " + buffer.available());

         buffer.close();
      }

      catch (Exception e) {
         e.getStackTrace();
      }
   }
}

輸出結(jié)果

開始時(shí)可用的字節(jié)數(shù): 39
結(jié)束時(shí)的可用字節(jié)數(shù): 36

在以上示例中,

  1. 我們首先使用available()方法檢查輸入流中可用字節(jié)的數(shù)量。

  2. 然后,我們使用read()方法3次從輸入流中讀取3個(gè)字節(jié)。

  3. 現(xiàn)在,在讀取字節(jié)之后,我們再次檢查了可用字節(jié)。這一次可用字節(jié)減少了3。

skip()方法

要丟棄和跳過指定的字節(jié)數(shù),可以使用skip()方法。例如

import java.io.FileInputStream;
import java.io.BufferedInputStream;

public class Main {

   public static void main(String args[]) {

      try {
        //假設(shè)input.txt文件包含以下文本
        //這是文件中的一行文本。
         FileInputStream file = new FileInputStream("input.txt");

         //創(chuàng)建一個(gè)BufferedInputStream
         BufferedInputStream buffer = new BufferedInputStream(file);

         //跳過5個(gè)字節(jié)
         buffer.skip(5);
         System.out.println("跳過5個(gè)字節(jié)后的輸入流:");

         //從輸入流中讀取第一個(gè)字節(jié)
         int i = buffer.read();
         while (i != -1) {
            System.out.print((char) i);

            //從輸入流中讀取下一個(gè)字節(jié)
            i = buffer.read();
         }

         //關(guān)閉輸入流
         buffer.close();
      }

      catch (Exception e) {
         e.getStackTrace();
      }
   }
}

輸出結(jié)果

跳過5個(gè)字節(jié)后的輸入流: is a line of text inside the file.

在上面的示例中,我們使用過skip()方法從文件輸入流中跳過5個(gè)字節(jié)。 因此,從輸入流中跳過字節(jié)“ T”,“ h”,“ i”,“ s”和“ ”。

close()方法

要關(guān)閉緩沖的輸入流,我們可以使用close()方法。 一旦調(diào)用close()方法,我們將無法使用輸入流讀取數(shù)據(jù)。

BufferedInputStream的其他方法

方法內(nèi)容描述
mark()標(biāo)記輸入流中已讀取數(shù)據(jù)的位置
reset()將控件返回到輸入流中設(shè)置了標(biāo)記的點(diǎn)
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清