This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
|
java:byte_streams [2017/02/07 12:02] gthanos [Πάντα να κλείνετε τα Streams] |
java:byte_streams [2020/03/09 07:21] gthanos [Ροές Δυαδικών Δεδομένων] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Ροές Δεδομένων ====== | + | ====== Ροές |
| - | Τα προγράμματα χρησιμοποιούν **byte streams** για να εκτελέσουν είσοδο και έξοδο | + | Όλες |
| - | Για να δείξουμε πώς δουλεύουν τα byte streams, θα ξεκινήσουμε από τις κλάσεις **[[http:// | + | Για να δείξουμε πώς δουλεύουν τα byte streams, θα ξεκινήσουμε από τις κλάσεις **[[http:// |
| ==== Χρησιμοποιώντας Byte Streams ==== | ==== Χρησιμοποιώντας Byte Streams ==== | ||
| - | Θα εξερευνήσουμε τις κλάσεις FileInputStream και FileOutputStream με χρήση του παρακάτω παραδείγματος // | + | Θα εξερευνήσουμε τις κλάσεις FileInputStream και FileOutputStream με χρήση του παρακάτω παραδείγματος // |
| <code java CopyBytes.java> | <code java CopyBytes.java> | ||
| Line 15: | Line 15: | ||
| public static void main(String[] args) throws IOException { | public static void main(String[] args) throws IOException { | ||
| - | | + | |
| - | FileOutputStream out = null; | + | |
| - | try { | + | try (FileInputStream in = new FileInputStream(filename); |
| - | String | + | |
| - | if(args.length > 0) | + | |
| - | filename = args[0]; | + | |
| - | | + | |
| - | filename | + | |
| | | ||
| - | in = new FileInputStream(filename); | ||
| - | out = new FileOutputStream(" | ||
| int c; | int c; | ||
| Line 32: | Line 25: | ||
| out.write(c); | out.write(c); | ||
| } | } | ||
| - | | + | } |
| - | if (in != null) { | + | |
| - | in.close(); | + | |
| - | } | + | |
| - | if (out != null) { | + | |
| - | out.close(); | + | |
| - | } | + | |
| - | | + | |
| } | } | ||
| } | } | ||
| </ | </ | ||
| - | Η μέθοδος main της κλάσης // | + | Η μέθοδος main της κλάσης // |
| - | {{ : | ||
| - | <WRAP tip 80% center round> | + | ===== Διαβάζοντας και γράφοντας περισσότερα από ένα bytes ===== |
| - | Το κλείσιμο των streams | + | Το παράδειγμα που είδαμε προηγουμένως το πρόγραμμα διαβάζει και γράφει ένα byte κάθε φορά. Παρακάτω θα δούμε το ίδιο πρόγραμμα, μόνο που αυτή τη φορά διαβάζουμε και γράφουμε περισσότερα του ενός bytes σε κάθε εντολή read και write. |
| - | Ένα πιθανό σφάλμα είναι ότι το //CopyBytes// δεν μπόρεσε να ανοίξει το ένα ή και τα δύο αρχεία. Σε αυτή την περίπτωση θα παραχθεί ένα //I/O Exception//. Όταν συμβαίνει αυτό, η stream μεταβλητή θα έχει την τιμή | + | <code java CopyBytes.java> |
| - | </ | + | import java.io.*; |
| - | ==== Σε ποιες περιπτώσεις να μην χρησιμοποιείτε τα Byte Streams ==== | + | 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 ===== | ||
| + | |||
| + | Στα παραπάνω | ||
| + | |||
| + | Παρακάτω δίνεται το προηγούμενο παράδειγμα χρησιμοποιώντας τις κλάσεις [[https:// | ||
| + | |||
| + | <code java CopyBufferedBytes.java> | ||
| + | import java.io.*; | ||
| + | |||
| + | public class CopyBufferedBytes { | ||
| + | public static void main(String[] args) throws IOException { | ||
| + | |||
| + | String filename = " | ||
| + | |||
| + | try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename)); | ||
| + | BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(" | ||
| + | |||
| + | byte []array = new byte[512]; | ||
| + | int length; | ||
| + | |||
| + | while ((length = in.read(array)) != -1) { | ||
| + | System.out.println(length); | ||
| + | out.write(array, | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <WRAP tip 80% center round> | ||
| + | O ρόλος του buffer | ||
| + | </ | ||
| - | |Προηγούμενο: | + | |Προηγούμενο: |