java:byte_streams
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| java:byte_streams [2020/03/05 12:53] – [Σε ποιες περιπτώσεις να μην χρησιμοποιείτε τα Byte Streams] gthanos | java:byte_streams [2020/03/09 07:27] (current) – [Buffered Streams] gthanos | ||
|---|---|---|---|
| Line 3: | Line 3: | ||
| Όλες οι κλάσεις που θα δούμε στη συνέχεια αυτής της ενότητας χρησιμοποιούν εσωτερικά **byte streams** για να εκτελέσουν είσοδο και έξοδο δεδομένων από αρχεία ή άλλες πηγές. Οι κλάσεις τύπου byte-stream είναι απόγονοι των κλάσεων **InputStream** και **OutputStream**. | Όλες οι κλάσεις που θα δούμε στη συνέχεια αυτής της ενότητας χρησιμοποιούν εσωτερικά **byte streams** για να εκτελέσουν είσοδο και έξοδο δεδομένων από αρχεία ή άλλες πηγές. Οι κλάσεις τύπου byte-stream είναι απόγονοι των κλάσεων **InputStream** και **OutputStream**. | ||
| - | Για να δείξουμε πώς δουλεύουν τα byte streams, θα ξεκινήσουμε από τις κλάσεις **[[http:// | + | Για να δείξουμε πώς δουλεύουν τα byte streams, θα ξεκινήσουμε από τις κλάσεις **[[http:// |
| ==== Χρησιμοποιώντας Byte Streams ==== | ==== Χρησιμοποιώντας Byte Streams ==== | ||
| - | Θα εξερευνήσουμε τις κλάσεις FileInputStream και FileOutputStream με χρήση του παρακάτω παραδείγματος // | + | Θα εξερευνήσουμε τις κλάσεις FileInputStream και FileOutputStream με χρήση του παρακάτω παραδείγματος // |
| <code java CopyBytes.java> | <code java CopyBytes.java> | ||
| Line 30: | Line 30: | ||
| </ | </ | ||
| - | Η μέθοδος main της κλάσης // | + | Η μέθοδος main της κλάσης // |
| - | ===== Διαβάζοντας και γράφοντας περισσότερα από ένα bytes σε δυαδικό αρχείο | + | ===== Διαβάζοντας και γράφοντας περισσότερα από ένα bytes ===== |
| - | Το παράδειγμα που είδαμε προηγουμένως το πρόγραμμα διαβάζει και γράφει ένα byte κάθε φορά. Προκειμένου να μπορούμε | + | Το παράδειγμα που είδαμε προηγουμένως το πρόγραμμα διαβάζει και γράφει ένα byte κάθε φορά. Παρακάτω θα δούμε |
| - | Παρακάτω θα ξαναγράψουμε το πρόγραμμα CopyBytes μόνο που | + | <code java CopyBytes.java> |
| + | import java.io.*; | ||
| + | |||
| + | public class CopyBytes { | ||
| + | public static void main(String[] args) throws IOException { | ||
| + | |||
| + | String filename = " | ||
| + | |||
| + | try (FileInputStream in = new FileInputStream(filename); | ||
| + | FileOutputStream out = new FileOutputStream(" | ||
| + | |||
| + | byte []array = new byte[512]; | ||
| + | int length; | ||
| + | |||
| + | while ((length = in.read(array)) != -1) { | ||
| + | System.out.println(length); | ||
| + | out.write(array, | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Buffered Streams ===== | ||
| + | |||
| + | Στα παραπάνω streams, υπάρχει η δυνατότητα να χρησιμοποιήσετε επιπλέον buffered streams, δηλαδή streams | ||
| + | |||
| + | Παρακάτω δίνεται το προηγούμενο παράδειγμα χρησιμοποιώντας τις | ||
| <code java CopyBufferedBytes.java> | <code java CopyBufferedBytes.java> | ||
| Line 45: | Line 72: | ||
| public static void main(String[] args) throws IOException { | public static void main(String[] args) throws IOException { | ||
| - | | + | |
| - | BufferedOutputStream out = null; | + | |
| - | final int buffer_size = 256; | + | |
| - | byte []buffer = new byte[buffer_size]; | + | |
| - | try { | + | try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename)); |
| - | String | + | |
| - | if(args.length > 0) | + | |
| - | filename = args[0]; | + | |
| - | | + | |
| - | filename | + | |
| | | ||
| - | | + | |
| - | out = new BufferedOutputStream(new FileOutputStream(" | + | int length; |
| - | int size; | + | |
| - | while ((size = in.read(buffer, 0, buffer_size)) != -1) { | + | while ((length |
| - | out.write(buffer, 0, size); | + | System.out.println(length); |
| + | out.write(array, 0, length); | ||
| } | } | ||
| - | | + | } |
| - | if (in != null) { | + | |
| - | in.close(); | + | |
| - | } | + | |
| - | if (out != null) { | + | |
| - | out.close(); | + | |
| - | } | + | |
| - | | + | |
| } | } | ||
| } | } | ||
| </ | </ | ||
| - | |Προηγούμενο: | + | <WRAP tip 80% center round> |
| + | O ρόλος του buffer είναι πάντα η βελτιστοποίηση της απόδοσης κατά την ανάγνωση ή εγγραφή. Για παράδειγμα, | ||
| + | </ | ||
| + | |||
| + | |Προηγούμενο: | ||
java/byte_streams.1583412838.txt.gz · Last modified: 2020/03/05 12:53 by gthanos
