Selles õpetuses õpime näidete abil Java BufferedInputStreami ja selle meetodeid.
BufferedInputStream
Klassi java.io
paketi kasutatakse koos teiste sisendid andmete lugemiseks (baitides) efektiivsemalt.
See laiendab InputStream
abstraktset klassi.
BufferedInputStreami töötamine
BufferedInputStream
Väidab sisemine puhver 8192 baiti .
Aastal lugemise ajal loetakse BufferedInputStream
kettalt baitide hulk ja salvestatakse sisemisse puhvrisse. Sisemisest puhverbaidist loetakse eraldi.
Seega väheneb kettale suhtlemise arv. Seetõttu on baitide lugemine kiirem BufferedInputStream
.
Looge BufferedInputStream
A loomiseks BufferedInputStream
peame java.io.BufferedInputStream
esmalt pakendi importima . Kui pakett on siia imporditud, saame sisendvoo luua.
// Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file);
Ülaltoodud näites oleme loonud nimega failiga BufferdInputStream
nimelise puhvri FileInputStream
.
Siin on sisepuhvri vaikimisi suurus 8192 baiti. Siiski võime täpsustada ka sisemise puhvri suuruse.
// Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size);
Puhver aitab failidest faile kiiremini lugeda.
BufferedInputStreami meetodid
BufferedInputStream
Tasemega näeb implementation erinevaid meetodeid sisalduse funktsioon InputStream
tasemega.
loe () meetod
read()
- loeb sisevoolust ühe baidiread(byte() arr)
- loeb voost baidid ja salvestab määratud massiiviread(byte() arr, int start, int length)
- loeb voo pikkusega võrdse baitide arvu ja salvestab määratud massiivi alates positsiooni algusest
Oletame, et meil on järgmise sisuga fail nimega input.txt .
This is a line of text inside the file.
Proovime faili lugeda 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(); ) ) )
Väljund
See on failirea tekstirida.
Ülaltoodud näites oleme loonud koos puhverdatud sisendvoo nimega puhver FileInputStream
. Sisendvoog on seotud failiga input.txt .
FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file);
Siin oleme kasutanud read()
meetodit baitide massiivi lugemiseks puhverdatud lugeja sisemisest puhvrist.
saadaval () meetod
Sisendvoos saadaolevate baitide arvu saamiseks saame available()
meetodit kasutada . Näiteks,
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(); ) ) )
Väljund
Alguses saadaolevad baidid: 39 saadaval olevad baidid: 36
Ülaltoodud näites
- Kõigepealt kasutasime
available()
meetodit sisendvoos saadaolevate baitide arvu kontrollimiseks. - Seejärel oleme
read()
meetodit 3 korda kasutanud, et lugeda 3 baiti sisendvoost. - Nüüd, pärast baitide lugemist, oleme uuesti kontrollinud saadaolevaid baite. Seekord vähenesid saadaolevad baidid 3 võrra.
skip () meetod
Määratud baitide arvu ära viskamiseks ja vahele jätmiseks saame seda skip()
meetodit kasutada . Näiteks,
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(); ) ) )
Väljund
Sisendvoog pärast 5 baiti vahele jätmist: on failirea tekstirida.
Ülaltoodud näites oleme skip()
meetodi abil 5 baiti vahele jätnud faili sisendvoost. Seega baiti 'T'
, 'h'
, 'i'
, 's'
ja ' '
jäetakse vahele lähtekohast sisendivoost.
close () meetod
Puhverdatud sisendvoo sulgemiseks saame kasutada close()
meetodit. Kui close()
meetod on välja kutsutud, ei saa me andmete lugemiseks sisendvoogu kasutada.
Muud puhverdatud sisendvoo meetodid
Meetodid | Kirjeldused |
---|---|
mark() | märkige sisendvoos asukoht, kuhu andmed on loetud |
reset() | tagastab juhtelemendi sisendvoos punkti, kuhu märk oli seatud |
Lisateabe saamiseks külastage Java BufferdInputStream'i (ametlik Java dokumentatsioon).