Il linguaggio Java. Gli stream

Documenti analoghi
Input/Output in Java

Introduzione. Java. Streams. Streams

Il linguaggio Java I file sequenziali

20 - Input/Output su File

Java e Serializzazione dalla A all'xml di Leonardo Puleggi

Lettura e scrittura - Stream

Il sistema I/O di Java

RETI DI CALCOLATORI Linguaggio Java: Il Package di Input Output

JAVA INTRODUZIONE C++ JDK e JRE API IDE (BLUEJ) JAVA Introduzione. Versioni e IDE DIAPOSITIVA 2 ALESSANDRO URSOMANDO

Unità 2 I file binari

789:;<:' .&+/"0&12%34%5&66+,("%3787%% %"+&%88$77%9%8:$:7%% ;<'&12%8%=,+>"%3787 % % % %"+&%88$77%9%8:$:7%

ProgrammazioneJava. Davide Di Ruscio Dipartimento di Informatica Università degli Studi dell Aquila.

Flussi, lettori e scrittori

Prof. D. Malerba Dr. A. Appice - Dr. M.Ceci. Il sistema Input/Output di Java

Corso sul linguaggio Java

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2012/2013

Remote Method Invocation (RMI)

Sistemi Distribuiti. Anno Accademico Prof. Flavio De Paoli. Il modello ad oggetti

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Creazione, eliminazione, lettura e scrittura di file di testo

Laboratorio di reti I: Java IO

C. Horstmann Fondamenti di programmazione e Java 2 3^ edizione Apogeo

Programmazione 2. Input Output su Stream e File

Lezione 18 Le classi per l'input/output nel pacchetto java.io

File, flussi e pacchetto java.io

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Esonero del corso di Programmazione a Oggetti

Un flusso (stream) è una astrazione che produce e/o consuma informazioni.

Corso Android New Edition Corso Online Programmatore Android New Edition

RMI. Java RMI RMI. G. Prencipe

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete

Architettura Client-Server

Corso di Reti di Calcolatori L-A

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Scritto da Enrico Battuello Giovedì 25 Novembre :11 - Ultimo aggiornamento Venerdì 07 Gennaio :50

Esercitazioni Ingegneria del So2ware 3 - Programmazione Java Excep<ons, I/O

LabVIEW parte II. Ing. Gianfranco Miele November 3, 2010

LPR A 2005/2006 Lezione 4

Corso Online. We Train Italy

Architettura degli elaboratori Docente:

Files in C++ Fondamenti di Informatica. R. Basili. a.a

Sviluppo Applicazioni Mobile Lezione 13. Dr. Paolo Casoto, Ph.D

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_ Stefano Millozzi

RMI. Introduzione DI GIOVANNI PULITI

Lezione n.7 LPR -Informatica applicata Socket e Datagram UDP. 11/4/2013 Laura Ricci

Outline. Remote Method Invocation in Java. Remote Procedure Call (RPC) Introduzione Storica. Remote Procedure Call (RPC) Remote Procedure Call (RPC)

Programmazione Orientata agli Oggetti

Uno stream o flusso di dati o canale è un percorso di comunicazione tra la sorgente di una certa informazione e la sua destinazione.

Ingegneria del Software

RMI e Firewall. Una soluzione è offerta dal transport layer di RMI stesso

Input e Output in Java

Capitolo 13 Java IO. Software per TLC - AA 2008/2009 1

Programmazione di rete in Java

Programmazione distribuita

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144

Definizione di metodi in Java

Corso di Laurea in Informatica e Comunicazione Digitale. a.a Interazione Uomo-Macchina. Introduzione a Java.

Java RMI (Remote Method Invocation)

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

4 GLI ARRAY E LE STRINGHE

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D

Socket & RMI Ingegneria del Software - San Pietro

C# I FILES. Ad esempio, se volessimo memorizzare le seguenti informazioni relative ad una persona: Nome Telefono Indirizzo

Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++

Laboratorio di programmazione di rete - Corso B - Anno accademico Progetto conclusivo. Laboratorio di Programmazione di Rete

Modificatori. Controllo di visibilità

public double getlato() restituisce la lunghezza del lato del quadrato che esegue il metodo.

Operazioni di scrittura e lettura con periferici in linguaggio Java

Gestione delle eccezioni in Java

LA MEMORIA NEL CALCOLATORE

Introduzione a Java Remote Method Invocation (RMI)

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.

Uno stream rappresenta un flusso di dati da cui e' possibile

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Esercizi per il recupero del debito formativo:

Esercizio 1: archivio CD e DVD

I S T I T U T O T E C N I C O I N D U S T R I A L E S T A T A L E

Introduzione al C. Stream e disk file

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2)

Programmazione ad Oggetti

Compute engine generici in RMI

Elementi base per la realizzazione dell unità di calcolo

Programmazione a Oggetti Lezione 10. Ereditarieta

UML. Il linguaggio UML e ArgoUML. Ingegneria dei sistemi software 2009/ /09/2009

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

Oggetti e classi. Cos è un oggetto

Esercitazione n 4. Obiettivi

Internet Socket e RMI

Uso di metodi statici. Walter Didimo

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Problema: calcolare il massimo tra K numeri

Libreria standard JAVA

PROGRAMMARE IN JAVA VOLUME II

Gestione di files Motivazioni

Introduzione alla programmazione Http lato server in Java

Transcript:

Il linguaggio Java Gli stream

Overview Uno stream è un flusso unidirezionale di informazioni da una sorgente esterna ovvero verso una sorgente esterna a cui si accede in modo sequenziale 2

Algoritmi di lettura/scrittura Reading Writing open a stream open a stream while more information while more information read information write information close the stream close the stream Gli algoritmi di lettura e di scrittura sono indipendenti dalla sorgente/destinatario esterno e dalle informazioni lette/scritte 3

Il package java.io 4

Classi astratte su sfondo bianco Flussi Di Caratteri 5

Flussi Di Byte 6

API Reader InputStream int read() int read() int read(char cbuf[]) int read(byte cbuf[]) int read(char cbuf[], int read(byte cbuf[], int offset, int offset, int length) int length) Writer OutputStream int write(int c) int write(int c) int write(char cbuf[]) int write(byte cbuf[]) int write(char cbuf[], int write(byte cbuf[], int offset, int offset, int length) int length) 7

Apertura e chiusura dei flussi Quando un flusso viene creato viene anche automaticamente aperto Un flusso può essere chiuso esplicitamente per mezzo del metodo close Quando un flusso viene raccolto, il GC provvede automaticamente anche a chiuderlo 8

Flusso file di caratteri FileReader FileWriter Flusso file di byte FileInputStream FileOutputStream I flussi file 9

Wrapping operazione esterna elaborazione stream esterno operazione interna stream interno lo stream esterno (outer stream) avvolge lo stream interno (inner stream) 10

Lettura e scrittura bufferizzata public class BufferedReader legge da uno stream a caratteri, bufferizzando i caratteri in modo da fornire una lettura efficiente di caratteri, linee ed array La dimensione del buffer può essere specificata; la dimensione di default è sufficientemente grande per la maggior parte degli scopi; public class BufferedWriter scrive in uno stream a caratteri, bufferizzando i caratteri in modo da fornire una scrittura efficiente di caratteri, linee ed array 11

Scrittura formattata public class PrintWriter permette di scrivere una rappresentazione formattata di un qualunque oggetto su di un flusso di caratteri void print(boolean b), void print(int i), void print(long l), void print(string s) void print(object o) Se l'auto-flush è abilitato, esso verrà eseguito quando viene eseguito uno dei metodi println, printf, o format 12

I flussi filtro I flussi filtro eseguono un filtraggio (elaborazione) sui dati letti dal, o da scrivere sul, flusso interno che avvolgono Il tipo di filtraggio dipende dal tipo del flusso filtro Es.: bufferizzazione dei dati; conteggio dei dati in transito; conversione dei dati; I flussi filtro discendono da flussi di byte: FilterInputStream, FilterOutputStream flussi di char: FilterReader, FilterWriter Per i flussi di byte public class DataInputStream e public class DataOutputStream permettono di leggere e scrivere, rispettivamente, valori di tipo primitivo sul flusso di byte avvolto 13

I flussi filtro (byte) Per utilizzare un flusso filtro bisogna avvolgere un flusso esistente in un flusso filtro (quando questo viene creato, ad esempio) Per definire un flusso filtro, bisogna derivare FilterInputStream (*) o FilterOutputStream (*) sovrascrivere i metodi read e write (*) Classi astratte. 14

La serializzazione concetti base

Serializzazione La serializzazione è il processo per mezzo del quale lo stato di un oggetto viene scritto in un flusso (serializzato) in modo tale da poter essere successivamente riletto La serializzazione viene utilizzata per Network programming Remote Method Invocation (RMI) Lightweight persistence 16

Serializzazione Per la serializzazione di oggetti si utilizzano le classi ObjectInputStream ObjectOutputStream Tali oggetti devono avvolgere oggetti di classe InputStream OutputStream rispettivamente 17

Esempio Serializzazione di oggetti FileOutputStream out = new FileOutputStream("theTime"); ObjectOutputStream s = new ObjectOutputStream(out); s.writeobject("today"); s.writeobject(new Date()); s.flush(); 18

Il metodo writeobject public final void writeobject (Object obj) throws IOException serializza l oggetto, attraversa i suoi riferimenti ad altri oggetti e, ricorsivamente, li serializza Il metodo writeobject lancia l eccezione NotSerializableException (*) se l oggetto non è serializzabile Un oggetto è serializzabile se implementa l interfaccia Serializable (*) sottoclasse di IOEXception 19

Lettura di oggetti serializzati FileInputStream in = new FileInputStream("theTime"); ObjectInputStream s = new ObjectInputStream(in); String today = (String)s.readObject(); Date date = (Date)s.readObject(); 20

Il metodo readobject public final Object readobject() throws IOException, ClassNotFoundException ritorna un Object che deve essere opportunamente castato Il metodo readobject de-serializza l oggetto, attraversa i suoi riferimenti ad altri oggetti e, ricorsivamente, li de-serializza Un oggetto è de-serializzabile se implementa l interfaccia Serializable 21

Serializzazione di una rete di oggetti x A w y B Efficienza: ogni oggetto deve essere copiato sullo stream una sola volta Consistenza: devono essere mantenute le relazioni tra gli oggetti C z 22

Serializzazione di un oggetto Algoritmo semplificato Ad ogni oggetto viene assegnato un numero di serie Quando si serializza un oggetto si verifica se tale oggetto è già stato serializzato in tal caso, si riferisce l'oggetto tramite il suo numero di serie; altrimenti si serializza l'oggetto 23

Serializzazione di un oggetto Oggetto Numero di serie A 1 B 2 C 3 x B A w y C z Serial nr = 1 w = 2 y = 3 Serial nr = 2 Serial nr. = 3 z = 2 A B C 24

Serializzazione di una classe Una classe è serializzabile se implementa l'interfaccia Serializable import java.io.serializable; public class MySerializableClass implements Serializable { // body } Serializable non contiene alcun membro NotSerializableException Classname Se una classe è serializzabile, le sue sottoclassi sono serializzabili 25

Serializzazione: comportamento di default Il comportamento di default consiste nella scrittura delle seguenti informazioni la classe dell'oggetto serialversionuid: definito di default (da evitare) o specificato dal programmatore (preferibile) ANY-ACCESS-MODIFIER static final long serialversionuid = 42L; (recommeded private) la signature della classe tutti i valori dei campi, inclusi i riferimenti, ma esclusi i campi static ed i campi transient 26

Serializzazione ed ereditarietà Serializzazione di un sottotipo di una classe non serializzabile class A { [public protected] A() { // constructor body } // other members } class B extends A, implements Serializable { // class body } Durante la serializzazione La sottoclasse (B) può gestire la serializzazione dei campi public, protected e package della superclasse La superclasse (A) deve avere un costruttore no-arg public o protected (Errore a run-time se tale costruttore non è disponibile) Durante la deserializzazione I campi della sottoclasse serializzabile (class B) sono deserializzati (inizializzati dallo stream) I campi della classe non-serializzabile (class A) sono inizializzati per mezzo dal costruttore noarg 27

Personalizzare la serializzazione (1) Per personalizzare la serializzazione di una classe bisogna dotare la classe dei metodi private void writeobject(java.io.objectoutputstream out) throws IOException; private void readobject(java.io.objectinputstream in) throws IOException, ClassNotFoundException; 28

Personalizzare la serializzazione (2) private void writeobject(java.io.objectoutputstream out) throws IOException { out.defaultwriteobject(); // default serialization mechanism // customised serialization code } private void readobject(java.io.objectinputstream in) throws IOException, ClassNotFoundException { in.defaultreadobject(); // default serialization mechanism // customised de-serialization code // followd by code to update the object, if necessary } 29

Personalizzare la serializzazione (2) I metodi writeobject e readobject si occupano di serializzare, de-serializzare, soltanto la classe immediata; la serializzazione della superclasse è gestita automaticamente. Tuttavia, se una classe deve coordinarsi con le superclassi per serializzarsi allora deve implementare l'interfaccia Externalizable 30

Interfaccia Externalizable (1) package java.io; interface Externalizable extends Serializable { public void writeexternal(objectoutput out) throws IOException; public void readexternal(objectinput in) throws IOException, ClassNotFoundException; } l'implementazione dell'interfaccia Externalizable permette un controllo completo della serializzazione per un oggetto Externalizable, solo l'identità della sua classe viene automaticamente scritta sullo stream 31

Interfaccia Externalizable (2) Una classe Externalizable deve implementare l'interfaccia java.io.externalizable deve implementare un metodo writeexternal per salvare lo stato dell'oggetto; deve anche esplicitamente coordinarsi con la sua superclasse per salvare il suo stato; deve implementare un metodo readexternal per ripristinare lo stato dell'oggetto; deve anche esplicitamente coordinarsi con la sua superclasse per ripristinare il suo stato; se è stato definito un formato esterno, writeexternal e readexternal sono i soli responsabili del formato 32

File ad accesso casuale La classe RandomAccessFile può essere utilizzata contemporaneamente per leggere e per scrivere implementa le interfacce DataInput e DataOutput (i filtri funzionano anche su RandomAccessFile) richiede che sia specificato sia il file da aprire quando viene creato un oggetto sia la modalità di apertura ("r", "rw") supporta la nozione di file pointer (getfilepointer, seek) 33

File pointer file (initial location = 0) current location int skipbytes(int) void seek(long) long getfilepointer() 34

Le interfacce DataInput e DataOutput La classe ObjectOutputStream (ObjectInputStream) implementa l interfaccia DataOutput (DataInput) che definisce metodi per scrivere tipi primitivi come writeint (readint), writefloat (readfloat), or writeutf (writeutf). Tali metodi possono essere utilizati per scrivere (leggere) tipi primitivi su (da) un ObjectOutputStream (ObjectInputStream) 35

References Object Serialization Specification HTML: http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/serialtoc.html PDF: http://java.sun.com/j2se/1.5/pdf/serial-1.5.0.pdf 36