This is an old revision of the document!
Μετασχηματισμός των ροών δεδομένων σε τύπους δεδομένων
Ο προηγούμενος κώδικας δουλεύει εξαιρετικά με ροές από bytes, στην πραγματικότητα όμως τα δεδομένα που θέλουμε να αποθηκεύσουμε ή να διαβάσουμε μπορεί να είναι ακέραιοι, αριθμοί κινητής υποδιαστολής κλπ. Προκειμένου να μπορέσουμε να διαβάσουμε ή να γράψουμε μορφές πληροφορίας που απαιτούν περισσότερα του ενός bytes έρχεται σε βοήθεια η κλάση java.nio.ByteBuffer. Η κλάση αυτή παρέχει ένα buffer μέσω του οποίου μπορούμε να γράψουμε ή να διαβάσουμε μορφές πληροφορίας.
Για παράδειγμα, ας υποθέσουμε ότι έχουμε μία σειρά από δεδομένα που θέλουμε να γράψουμε με συγκεκριμένη σειρά σε ένα αρχείο, όλα σε δυαδική μορφή. Προκειμένου να το επιτύχουμε θα πρέπει να κάνουμε τα εξής:
- να δημιουργήσουμε ένα αντικείμενο της κλάσης java.nio.ByteBuffer ικανού μεγέθους ώστε να μπορεί να αποθηκεύσει τη συγκεκριμένη πληροφορία,
- να αποθηκεύσουμε τις επιμέρους πληροφορίες στο buffer με τη σειρά που θέλουμε να αποθηκευτούν.
- να εξάγουμε από το buffer ένα πίνακα από bytes που περιέχει τη σχετική πληροφορία και τον πίνακα αυτό να τον γράψουμε στο OutputStream που επιθυμούμε.
Η διαδικασία ανάγνωσης είναι ακριβώς η αντίστροφή, δηλαδή:
- διαβάζουμε από ένα [https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html|InputStream]] την πληροφορία σε ένα πίνακα από bytes.
- Από τον πίνακα αυτό δημιουργούμε ένα java.nio.ByteBuffer.
- Από το java.nio.ByteBuffer εξάγουμε την πληροφορία με τη σειρά που γνωρίζουμε ότι αυτή είναι αποθηκευμένη.
Το παρακάτω πρόγραμμα αποθηκεύει έναν ακέραιο, ένα double, ένα χαρακτήρα και ένα string
