domenica 9 giugno 13 Serializzazione

Documenti analoghi
Serializzazione Java. Serializzazione. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione

Java e Serializzazione dalla A all'xml di Leonardo Puleggi

20 - Input/Output su File

Architettura Client-Server

Input/Output in Java

Errata Corrige di Manuale di Java 8

Unità 2 I file binari

Sockets in Java. Lorenzo Gallucci

Fondamenti di Informatica C Esercitazioni di Laboratorio / 4 Outline

Il linguaggio Java I file sequenziali

Flussi, lettori e scrittori

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

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

Chat. Si ha un server in ascolto sulla porta Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Esercitazione OBIETTIVI DELL ESERCITAZIONE

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

Remote Method Invocation (RMI)

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

Corso sul linguaggio Java

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel , dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell

Introduzione. Java. Streams. Streams

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

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

LPR A 2005/2006 Lezione 4

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

RMI. Java RMI RMI. G. Prencipe

Cifratura simmetrica

RETI DI CALCOLATORI Linguaggio Java: Il Package di Input Output

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

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

Corso sul linguaggio Java

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

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

Laboratorio di Programmazione 1 [Java]

Esempio su strutture dati dinamiche: ArrayList

Java RMI (Remote Method Invocation)

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Lettura e scrittura - Stream

Corso di Reti di Calcolatori L-A

Programmazione in Java e gestione della grafica. Lezione 24

Programmazione di rete in Java

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Compute engine generici in RMI

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

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

File, flussi e pacchetto java.io

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

Reti di Calcolatori. Esercitazione su: Crittografia & Bet Server. A.A. 2010/2011 Reti di Calcolatori 1 (Es. 6)

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

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

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

LAVORI ESTIVI DI INFORMATICA PER LA CLASSE IV Sez. Ainf (Prof. Tessore Luca)

L input da tastiera in Java. Dott. Ing. M. Banci, PhD

Programmare con le Socket TCP in java. 2: Application Layer 1

Le variabili. Olga Scotti

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Sincronizzazione con Java

Creazione, eliminazione, lettura e scrittura di file di testo

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

Lezione 5: Socket SSL/ TLS. Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno

MagiCum S.r.l. Progetto Inno-School

Creazione, eliminazione, lettura e scrittura di file di testo

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

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A I/O, thread, socket in Java

Uso di metodi statici. Walter Didimo

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

Programmazione orientata agli oggetti Classi, package e file system. Package

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Corso di Reti di Calcolatori. java.net.url

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Esercizi su strati di trasporto e di rete

Algoritmi di Ricerca. Esempi di programmi Java

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

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

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Gestione delle eccezioni in Java

Programmare con le Socket TCP

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

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

Rilevazione di dati in una stazione meteorologica

Operazioni numeriche - Input

Operazioni di scrittura e lettura con periferici in linguaggio Java

Programmare con le Socket

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Parte II: Reti di calcolatori Lezione 10

Java: Compilatore e Interprete

Gestione di file in Java

Fondamenti di Informatica I

File e Stream In Java. Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132

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

Parte II: Reti di calcolatori Lezione 12

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio)

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Il sistema I/O di Java

24 - Possibili approfondimenti

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

Caratteri e stringhe

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

Esercizi della lezione 5 di Java

Transcript:

Serializzazione

A cosa serve? Ad ottenere una rappresentazione di una struttura dati che possiamo memorizzare, trasmettere via rete

Cosa possiamo serializzare? OK NO Tipi primitivi, Riferimenti stringhe Istanze di classi che Istanze di serializzabili usano risorse di sistema (File, Socket, Thread,...)

Riferimenti La serializzazione genera una rappresentazione dei dati copiando il contenuto degli oggetti, non i loro riferimenti! Con la deserializzazione otteniamo dei nuovi oggetti, diversi da quelli originali ma con lo stesso valore

Classi serializzabili Implementano Serializable public class Person implements Serializable { private static final long serialversionuid = 9118979219684188155L; private final String name; private final int height; private final Date dateofbirth; } Contengono oggetti serializzabili Contengono tipi di dati primitivi o stringhe

serialversionuid È un identificativo della versione della classe serializzata. Serve per individuare problemi tra diverse versioni della stessa classe che potrebbero avere attributi diversi.

Serializzazione Dobbiamo usare il metodo writeobject della classe ObjectOutputStream Questo metodo genera una rappresentazione dell oggetto passato come parametro e lo scrive su uno stream (Ad esempio un file o un socket).

Esempio public static void main(string args[]) throws IOException { Person pippo = new Person("Pippo", new Date(1, 2, 1990), 180); ByteArrayOutputStream out = new ByteArrayOutputStream(); } ObjectOutputStream s = new ObjectOutputStream(out); s.writeobject(pippo); ByteArrayOutputStream memorizza i dati in un array di byte, ma avremmo potuto usare uno stream qualsiasi. Dopo la writeobject quell array conterrà una rappresentazione di pippo.

Deserializzazione Dobbiamo usare il metodo duale readobject della classe ObjectInputStream Questo metodo legge i dati dallo stream e restituisce il primo oggetto disponibile.

Esempio public static void main(string args[]) throws IOException, ClassNotFoundException { } ByteArrayInputStream in = new FileInputStream( pippo.dat ); ObjectInputStream inputstream = new ObjectInputStream(in); Person pippo = (Person) inputstream.readobject(); Attenzione alle eccezioni! Oltre agli errori dovuti alla lettura dallo stream potremmo avere una ClassNotFoundException se la classe dell oggetto che vogliamo deserializzare non è nel classpath.

Attributi non serializzabili A volte può capitare che una classe abbia degli attributi che non possiamo (o che non vogliamo) serializzare. Marcandoli come transient saranno ignorati dalla serializzazione. La deserializzazione (di default) non inizializza gli attributi transient. Dobbiamo quindi lasciare che lo faccia chi userà l oggetto oppure fornire un metodo di deserializzazione personalizzato

Esempio public class Person implements Serializable { private static final long serialversionuid = 9118979219684188155L; private final String name; private final Date dateofbirth; private final int height; private final Image image; private transient Image thumbnailimage; Aggiungiamo a persona una immagine personale e una miniatura di questa immagine. Per evitare di sprecare spazio vogliamo serializzare solamente l immagine originale.

Deserializzazione La deserializzazione di default non inizializza i campi transient che perciò assumono il valore null. Possiamo però personalizzare il metodo di deserializzazione facendo override del metodo readobject.

Esempio public class Person implements Serializable { private static final long serialversionuid = 9118979219684188155L; private final String name; private final Date dateofbirth; private final int height; private final Image image; private transient Image thumbnailimage; private void readobject(objectinputstream inputstream) throws IOException, ClassNotFoundException { inputstream.defaultreadobject(); generatethumbnail(); } Prima lasciamo che il metodo di serializzazione di default inizializzi l oggetto, poi possiamo invocare i metodi appropriati per inizializzare gli altri attributi.

Serializzazione e Socket

Comunicazione via socket outputstream inputstream Client Server inputstream outputstream

Input e output stream Di default possono trasmettere solamente sequenze di byte, però possiamo wrapparli in ObjectInputStream e ObjectOutputStream per trasmettere oggetti serializzabili. In questo modo possiamo gestire il protocollo di comunicazione più semplicemente e ad un livello di astrazione più elevato

Protocollo di comunicazione Anche usando degli oggetti la gestione del protocollo di comunicazione è completamente compito dell utente. Gli stream si comportano come delle code, quindi gli oggetti possono essere letti solo nell ordine in cui sono stati scritti. È meglio controllare sempre che l oggetto letto sia conforme con quanto previsto dal protocollo per evitare eccezioni quando effettuiamo il cast.