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

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

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

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

Σημείωση : Στο ByteArrayInputStream, η ροή εισόδου δημιουργείται χρησιμοποιώντας τον πίνακα byte. Περιλαμβάνει έναν εσωτερικό πίνακα για την αποθήκευση δεδομένων του συγκεκριμένου πίνακα byte.

Δημιουργήστε ένα ByteArrayInputStream

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

 // Creates a ByteArrayInputStream that reads entire array ByteArrayInputStream input = new ByteArrayInputStream(byte() arr); 

Εδώ, δημιουργήσαμε μια ροή εισόδου που διαβάζει ολόκληρα δεδομένα από τον arrπίνακα. Ωστόσο, μπορούμε επίσης να δημιουργήσουμε τη ροή εισόδου που διαβάζει μόνο ορισμένα δεδομένα από τον πίνακα.

 // Creates a ByteArrayInputStream that reads a portion of array ByteArrayInputStream input = new ByteArrayInputStream(byte() arr, int start, int length); 

Εδώ η ροή εισόδου διαβάζει τον αριθμό των byte ίσο με το μήκος από τον πίνακα ξεκινώντας από τη θέση έναρξης.

Μέθοδοι του ByteArrayInputStream

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

read () Μέθοδος

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

Παράδειγμα: ByteArrayInputStream για ανάγνωση δεδομένων

 import java.io.ByteArrayInputStream; public class Main ( public static void main(String() args) ( // Creates an array of byte byte() array = (1, 2, 3, 4); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); System.out.print("The bytes read from the input stream: "); for(int i= 0; i < array.length; i++) ( // Reads the bytes int data = input.read(); System.out.print(data + ", "); ) input.close(); ) catch(Exception e) ( e.getStackTrace(); ) ) ) 

Παραγωγή

 Τα byte που διαβάζονται από τη ροή εισόδου: 1, 2, 3, 4, 

Στο παραπάνω παράδειγμα, έχουμε δημιουργήσει μια ροή εισόδου πίνακα byte που ονομάζεται input.

 ByteArrayInputStream input = new ByteArrayInputStream(array); 

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

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

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

 import java.io.ByteArrayInputStream; public class Main ( public static void main(String args()) ( // Creates an array of bytes byte() array = ( 1, 2, 3, 4 ); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); // Returns the available number of bytes System.out.println("Available bytes at the beginning: " + input.available()); // Reads 2 bytes from the input stream input.read(); input.read(); // Returns the available number of bytes System.out.println("Available bytes at the end: " + input.available()); input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Παραγωγή

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

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

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

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

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

 import java.io.ByteArrayInputStream; public class Main ( public static void main(String args()) ( // Create an array of bytes byte() array = ( 1, 2, 3, 4 ); try ( ByteArrayInputStream input = new ByteArrayInputStream(array); // Using the skip() method input.skip(2); System.out.print("Input stream after skipping 2 bytes: "); int data = input.read(); while (data != -1) ( System.out.print(data + ", "); data = input.read(); ) // close() method input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Παραγωγή

 Ροή εισόδου μετά την παράλειψη 2 byte: 3, 4, 

Στο παραπάνω παράδειγμα, χρησιμοποιήσαμε τη μέθοδο παράλειψης () για παράλειψη 2 byte δεδομένων από τη ροή εισόδου. Ως εκ τούτου, τα 1 και 2 δεν διαβάζονται από τη ροή εισόδου.

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

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

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

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

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

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

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