Šajā apmācībā mēs ar piemēru palīdzību uzzināsim par Java BufferedInputStream un tās metodēm.
BufferedInputStream
No klases java.io
paketē tiek lietots kopā ar citiem ievades plūsmām nolasīt datus (baitos) efektīvāk.
Tas paplašina InputStream
abstrakto klasi.
BufferedInputStream darbs
BufferedInputStream
Uztur iekšējo buferi 8192 baitu .
Veicot lasīšanas darbību BufferedInputStream
, no diska tiek nolasīts baitu gabals un saglabāts iekšējā buferī. Un no iekšējā bufera baiti tiek nolasīti atsevišķi.
Tādējādi tiek samazināts sakaru skaits uz disku. Tāpēc baitu lasīšana ir ātrāka, izmantojot BufferedInputStream
.
Izveidojiet BufferedInputStream
Lai izveidotu a BufferedInputStream
, mums vispirms ir jāimportē java.io.BufferedInputStream
pakete. Pēc pakotnes importēšanas šeit mēs varam izveidot ievades straumi.
// Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file);
Iepriekš minētajā piemērā mēs esam izveidojuši BufferdInputStream
nosauktu buferi ar FileInputStream
nosaukto failu.
Šeit iekšējā bufera noklusējuma lielums ir 8192 baiti. Tomēr mēs varam norādīt arī iekšējā bufera lielumu.
// Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size);
Buferis palīdzēs ātrāk nolasīt baitus no failiem.
BufferedInputStream metodes
BufferedInputStream
Klase nodrošina implementācijas dažādām metodēm prezentēt šajā InputStream
klasē.
lasīt () Metode
read()
- nolasa vienu baitu no ievades straumesread(byte() arr)
- nolasa baitus no straumes un glabā norādītajā masīvāread(byte() arr, int start, int length)
- nolasa baitu skaitu, kas vienāds ar garumu no straumes, un glabā norādītajā masīvā, sākot no pozīcijas sākuma
Pieņemsim, ka mums ir fails ar nosaukumu input.txt ar šādu saturu.
This is a line of text inside the file.
Mēģināsim lasīt failu, izmantojot BufferedInputStream
.
import java.io.BufferedInputStream; import java.io.FileInputStream; class Main ( public static void main(String() args) ( try ( // Creates a FileInputStream FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream input = new BufferedInputStream(file); // Reads first byte from file int i = input .read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the file i = input.read(); ) input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Rezultāts
Šī ir teksta rindiņa faila iekšpusē.
Iepriekš minētajā piemērā mēs esam izveidojuši buferētu ievades plūsmu ar nosaukumu buferis kopā ar FileInputStream
. Ievades straume ir saistīta ar failu input.txt .
FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file);
Šeit mēs izmantojām read()
metodi baitu masīva nolasīšanai no buferētā lasītāja iekšējā bufera.
pieejama () metode
Lai iegūtu pieejamo baitu skaitu ievades straumē, mēs varam izmantot available()
metodi. Piemēram,
import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Returns the available number of bytes System.out.println("Available bytes at the beginning: " + buffer.available()); // Reads bytes from the file buffer.read(); buffer.read(); buffer.read(); // Returns the available number of bytes System.out.println("Available bytes at the end: " + buffer.available()); buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Rezultāts
Pieejamie baiti sākumā: 39 Pieejamie baiti beigās: 36
Iepriekš minētajā piemērā
- Vispirms mēs izmantojam
available()
metodi, lai pārbaudītu pieejamo baitu skaitu ievades straumē. - Tad mēs esam izmantojuši
read()
metodi 3 reizes, lai nolasītu 3 baitus no ievades straumes. - Pēc baitu lasīšanas mēs atkal esam pārbaudījuši pieejamos baitus. Šoreiz pieejamie baiti samazinājās par 3.
izlaist () metode
Lai izmestu un izlaistu norādīto baitu skaitu, mēs varam izmantot skip()
metodi. Piemēram,
import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Skips the 5 bytes buffer.skip(5); System.out.println("Input stream after skipping 5 bytes:"); // Reads the first byte from input stream int i = buffer.read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the input stream i = buffer.read(); ) // Closes the input stream buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Rezultāts
Ievades straume pēc 5 baitu izlaišanas: ir teksta rindiņa faila iekšpusē.
Iepriekš minētajā piemērā mēs izmantojām skip()
metodi, lai izlaistu 5 baitus no faila ievades straumes. Līdz ar to, ka baiti 'T'
, 'h'
, 'i'
, 's'
un ' '
ir izlaidis no ieejas plūsmā.
aizvērt () metode
Lai aizvērtu buferēto ievades straumi, mēs varam izmantot close()
metodi. Kad close()
metode ir izsaukta, mēs nevaram izmantot ievades straumi, lai lasītu datus.
Citas BufferedInputStream metodes
Metodes | Apraksti |
---|---|
mark() | atzīmējiet ievades straumes pozīciju, līdz kurai dati ir nolasīti |
reset() | atgriež vadību tajā ievades straumes punktā, kurā tika iestatīta atzīme |
Lai uzzinātu vairāk, apmeklējiet Java BufferdInputStream (oficiālā Java dokumentācija).