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