Ebben az oktatóanyagban példák segítségével megismerhetjük a Java BufferedInputStream-et és annak módszereit.
A csomag BufferedInputStream
osztályát java.io
más bemeneti folyamokkal használják az adatok hatékonyabb (bájtokban) olvasására.
Kiterjeszti az InputStream
absztrakt osztályt.
A BufferedInputStream működése
A BufferedInputStream
fenntartja belső puffer 8192 byte .
A beolvasási művelet során BufferedInputStream
egy darab bájt olvasható le a lemezről, és a belső pufferben tárolódik. És a belső pufferből a bájtokat egyenként olvassák le.
Ezért csökken a lemezre irányuló kommunikáció száma. Ezért gyorsabb a bájtok olvasása a BufferedInputStream
.
Hozzon létre egy BufferedInputStream-et
A létrehozásához először BufferedInputStream
importálnunk kell a java.io.BufferedInputStream
csomagot. A csomag importálása után itt hozhatjuk létre a bemeneti adatfolyamot.
// Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file);
A fenti példában létrehoztunk egy BufferdInputStream
megnevezett puffert a FileInputStream
megnevezett fájllal.
Itt a belső puffer alapértelmezett mérete 8192 bájt. Megadhatjuk azonban a belső puffer méretét is.
// Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size);
A puffer segít gyorsabban olvasni a bájtokat a fájlokból.
A BufferedInputStream módszerei
Az BufferedInputStream
osztály megvalósításokat biztosít az InputStream
osztályban jelen lévő különböző módszerek számára .
read () módszer
read()
- egyetlen bájtot olvas be a bemeneti adatfolyambólread(byte() arr)
- beolvassa a bájtokat az adatfolyamból és tárolja a megadott tömbbenread(byte() arr, int start, int length)
- beolvassa a bájtok számát, amely megegyezik a folyam hosszával, és tárolja a megadott tömbben a pozíció kezdetétől kezdődően
Tegyük fel, hogy van egy input.txt nevű fájlunk a következő tartalommal.
This is a line of text inside the file.
Próbáljuk meg elolvasni a fájlt a 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(); ) ) )
Kimenet
Ez egy szövegsor a fájl belsejében.
A fenti példában létrehoztunk egy puffer nevű, puffer nevű bemeneti folyamot FileInputStream
. A bemeneti adatfolyam az input.txt fájlhoz van kapcsolva .
FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file);
Itt azt a read()
módszert használtuk, hogy a pufferolt olvasó belső pufferéből egy bájtömböt olvassunk.
elérhető () módszer
Ahhoz, hogy megkapjuk a rendelkezésre álló bájtok számát a bemeneti adatfolyamban, használhatjuk a available()
módszert. Például,
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(); ) ) )
Kimenet
Elérhető bájtok az elején: 39 Elérhető bájtok a végén: 36
A fenti példában
- Először a
available()
módszer segítségével ellenőrizzük a rendelkezésre álló bájtok számát a bemeneti adatfolyamban. - Ezután
read()
háromszor használtuk a módszert 3 bájt beolvasására a bemeneti adatfolyamból. - A bájtok elolvasása után ismét ellenőrizzük a rendelkezésre álló bájtokat. Ezúttal a rendelkezésre álló bájtok 3-mal csökkentek.
skip () módszer
A megadott számú bájt elvetéséhez és kihagyásához használhatjuk a skip()
módszert. Például,
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(); ) ) )
Kimenet
Bemeneti adatfolyam 5 bájt kihagyása után: egy szövegsor a fájl belsejében.
A fenti példában azt a skip()
módszert alkalmaztuk, hogy kihagyjunk 5 bájtot a fájl bemeneti adatfolyamából. Ennélfogva, a bájt 'T'
, 'h'
, 'i'
, 's'
és ' '
átugorja a bemeneti folyam.
bezár () módszer
A pufferelt bemeneti adatfolyam bezárásához használhatjuk a close()
módszert. A close()
módszer meghívása után nem használhatjuk a bemeneti adatfolyamot az adatok kiolvasására.
A BufferedInputStream egyéb módszerei
Mód | Leírások |
---|---|
mark() | jelölje be a bemeneti adatfolyamban azt a helyet, amelyre az adatokat beolvasták |
reset() | visszaadja a vezérlést a bemeneti adatfolyam azon pontjára, ahol a jelölést beállították |
További információkért látogasson el a Java BufferdInputStream oldalra (hivatalos Java dokumentáció).