Java BufferedInputStream (με παραδείγματα)

Σε αυτό το σεμινάριο, θα μάθουμε για το Java BufferedInputStream και τις μεθόδους του με τη βοήθεια παραδειγμάτων.

Η BufferedInputStreamκλάση του java.ioπακέτου χρησιμοποιείται με άλλες ροές εισόδου για την πιο αποτελεσματική ανάγνωση των δεδομένων (σε byte).

Επεκτείνει την InputStreamαφηρημένη τάξη.

Εργασία του BufferedInputStream

Η BufferedInputStreamδιατηρεί ένα εσωτερικό ρυθμιστικό διάλυμα των 8192 bytes .

Κατά τη διάρκεια της λειτουργίας ανάγνωσης, διαβάζεται BufferedInputStreamένα κομμάτι byte από το δίσκο και αποθηκεύεται στο εσωτερικό buffer. Και από το εσωτερικό buffer byte διαβάζονται ξεχωριστά.

Ως εκ τούτου, ο αριθμός της επικοινωνίας με το δίσκο μειώνεται. Αυτός είναι ο λόγος για τον οποίο η ανάγνωση byte είναι πιο γρήγορη χρησιμοποιώντας το BufferedInputStream.

Δημιουργήστε μια BufferedInputStream

Για να δημιουργήσουμε ένα BufferedInputStream, πρέπει java.io.BufferedInputStreamπρώτα να εισαγάγουμε το πακέτο. Μόλις εισαγάγουμε το πακέτο εδώ είναι πώς μπορούμε να δημιουργήσουμε τη ροή εισόδου.

 // Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file); 

Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει ένα BufferdInputStreamόνομα buffer με το FileInputStreamόνομα του αρχείου.

Εδώ, το εσωτερικό buffer έχει το προεπιλεγμένο μέγεθος 8192 byte. Ωστόσο, μπορούμε επίσης να καθορίσουμε το μέγεθος του εσωτερικού buffer.

 // Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size); 

Το buffer θα βοηθήσει στην ταχύτερη ανάγνωση byte από τα αρχεία.

Μέθοδοι BufferedInputStream

Η BufferedInputStreamτάξη παρέχει υλοποιήσεις για διαφορετικές μεθόδους που υπάρχουν στην InputStreamτάξη.

read () Μέθοδος

  • read() - διαβάζει ένα byte από τη ροή εισόδου
  • read(byte() arr) - διαβάζει byte από τη ροή και αποθηκεύει στον καθορισμένο πίνακα
  • read(byte() arr, int start, int length) - διαβάζει τον αριθμό των byte ίσο με το μήκος από τη ροή και αποθηκεύει στον καθορισμένο πίνακα ξεκινώντας από την έναρξη της θέσης

Ας υποθέσουμε ότι έχουμε ένα αρχείο με όνομα input.txt με το ακόλουθο περιεχόμενο.

 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 ( // 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(); ) ) ) 

Παραγωγή

 Αυτή είναι μια γραμμή κειμένου μέσα στο αρχείο. 

Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει ένα buffered stream input που ονομάζεται buffer μαζί με FileInputStream. Η ροή εισόδου συνδέεται με το αρχείο input.txt .

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

Εδώ, χρησιμοποιήσαμε τη read()μέθοδο για να διαβάσουμε έναν πίνακα byte από το εσωτερικό buffer του buffer reader.

διαθέσιμη () Μέθοδος

Για να λάβουμε τον αριθμό των διαθέσιμων byte στη ροή εισόδου, μπορούμε να χρησιμοποιήσουμε τη available()μέθοδο. Για παράδειγμα,

 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(); ) ) ) 

Παραγωγή

 Διαθέσιμα byte στην αρχή: 39 Διαθέσιμα byte στο τέλος: 36 

Στο παραπάνω παράδειγμα,

  1. Αρχικά χρησιμοποιούμε τη available()μέθοδο για να ελέγξουμε τον αριθμό των διαθέσιμων byte στη ροή εισόδου.
  2. Στη συνέχεια, χρησιμοποιήσαμε τη read()μέθοδο 3 φορές για να διαβάσουμε 3 byte από τη ροή εισόδου.
  3. Τώρα, αφού διαβάσαμε τα bytes, ελέγξαμε ξανά τα διαθέσιμα byte. Αυτή τη φορά τα διαθέσιμα byte μειώθηκαν κατά 3.

παράλειψη () Μέθοδος

Για να απορρίψουμε και να παραλείψουμε τον καθορισμένο αριθμό byte, μπορούμε να χρησιμοποιήσουμε τη skip()μέθοδο. Για παράδειγμα,

 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(); ) ) ) 

Παραγωγή

 Ροή εισόδου μετά την παράλειψη 5 byte: είναι μια γραμμή κειμένου μέσα στο αρχείο. 

Στο παραπάνω παράδειγμα, χρησιμοποιήσαμε τη skip()μέθοδο για παράλειψη 5 byte από τη ροή εισαγωγής αρχείου. Ως εκ τούτου, τα bytes 'T', 'h', 'i', 's'και ' 'παραλείπονται από το ρεύμα εισόδου.

κλείσιμο () Μέθοδος

Για να κλείσουμε τη ρυθμισμένη ροή εισόδου, μπορούμε να χρησιμοποιήσουμε τη close()μέθοδο. Μόλις close()κληθεί η μέθοδος, δεν μπορούμε να χρησιμοποιήσουμε τη ροή εισόδου για να διαβάσουμε τα δεδομένα.

Άλλες μέθοδοι BufferedInputStream

Μέθοδοι Περιγραφές
mark() επισημάνετε τη θέση στη ροή εισόδου μέχρι την οποία έχουν διαβαστεί τα δεδομένα
reset() επιστρέφει το στοιχείο ελέγχου στο σημείο της ροής εισόδου όπου ορίστηκε το σήμα

Για να μάθετε περισσότερα, επισκεφθείτε το Java BufferdInputStream (επίσημη τεκμηρίωση Java).

ενδιαφέροντα άρθρα...