Tässä opetusohjelmassa opitaan Java BufferedInputStreamista ja sen menetelmistä esimerkkien avulla.
BufferedInputStream
Luokan java.io
paketti käytetään yhdessä muiden syötevirtojen lukemaan tiedot (tavuina) tehokkaammin.
Se laajentaa InputStream
abstraktia luokkaa.
BufferedInputStreamin toiminta
BufferedInputStream
On sisäisen puskurin 8192 tavua .
Lukutoiminnon aikana BufferedInputStream
palan tavu luetaan levyltä ja tallennetaan sisäiseen puskuriin. Ja sisäisestä puskurista tavut luetaan erikseen.
Siksi levylle tapahtuvan tiedonsiirron määrä vähenee. Siksi tavujen lukeminen on nopeampaa BufferedInputStream
.
Luo BufferedInputStream
Paketin luomiseksi BufferedInputStream
meidän on java.io.BufferedInputStream
ensin tuotava paketti. Kun tuot paketin täältä, voimme luoda tulovirran.
// Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file);
Yllä olevassa esimerkissä olemme luoneet BufferdInputStream
nimetyn puskurin FileInputStream
nimeltä mainitun tiedoston kanssa.
Tässä sisäisen puskurin oletuskoko on 8192 tavua. Voimme kuitenkin määrittää myös sisäisen puskurin koon.
// Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size);
Puskuri auttaa lukemaan tavuja tiedostoista nopeammin.
BufferedInputStream-menetelmät
BufferedInputStream
Luokka antaa toteutuksia eri menetelmiä esittää, että InputStream
luokan.
read () Menetelmä
read()
- lukee yhden tavun tulovirrastaread(byte() arr)
- lukee tavuja virrasta ja tallentaa määritettyyn ryhmäänread(byte() arr, int start, int length)
- lukee tavun määrän, joka on yhtä suuri kuin virta ja tallentaa tietylle taulukolle aloituskohdasta alkaen
Oletetaan, että meillä on tiedosto nimeltä input.txt, jolla on seuraava sisältö.
This is a line of text inside the file.
Yritetään lukea tiedosto käyttämällä 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(); ) ) )
Tuotos
Tämä on tekstirivi tiedoston sisällä.
Edellä olevassa esimerkissä olemme luoneet puskuroidun tulovirran, jonka nimi on puskuri FileInputStream
. Syöttövirta on linkitetty tiedostoon input.txt .
FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file);
Tässä olemme käyttäneet read()
menetelmää tavujärjestelmän lukemiseen puskuroidun lukijan sisäisestä puskurista.
käytettävissä () Menetelmä
Saadaksemme käytettävissä olevan tavun määrän syöttövirrassa voimme käyttää available()
menetelmää. Esimerkiksi,
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(); ) ) )
Tuotos
Käytettävissä olevat tavut alussa: 39 Käytettävissä olevat tavut lopussa: 36
Yllä olevassa esimerkissä
available()
Tarkastamme ensin menetelmän käytettävissä olevien tavujen määrän syöttövirrassa.- Sitten olemme käyttäneet
read()
menetelmää 3 kertaa lukemaan 3 tavua tulovirrasta. - Luettuamme tavut olemme nyt tarkistaneet käytettävissä olevat tavut. Tällä kertaa käytettävissä olevat tavut laskivat 3: lla.
skip () Menetelmä
Hylätään ja ohitetaan määritetty määrä tavuja, voimme käyttää skip()
menetelmää. Esimerkiksi,
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(); ) ) )
Tuotos
Syöttövirta 5 tavun ohittamisen jälkeen: on tekstirivi tiedoston sisällä.
Yllä olevassa esimerkissä olemme käyttäneet skip()
menetelmää ohittaa 5 tavua tiedoston syöttövirrasta. Siten, tavut 'T'
, 'h'
, 'i'
, 's'
ja ' '
ohitetaan tulo virta.
sulje () Menetelmä
Puskuroidun tulovirran sulkemiseksi voimme käyttää close()
menetelmää. Kun close()
menetelmä on kutsuttu, emme voi käyttää syötevirtaa tietojen lukemiseen.
Muut BufferedInputStreamin menetelmät
Menetelmät | Kuvaukset |
---|---|
mark() | merkitse sijainti syötevirrassa, johon tiedot on luettu |
reset() | palauttaa ohjauksen tulovirran pisteeseen, johon merkki asetettiin |
Lisätietoja on Java BufferdInputStream -sivustossa (virallinen Java-dokumentaatio).