La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Programmazione in Java (9) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta I/O Evoluto Serializzazione Comunicazioni via socket JUnit.

Presentazioni simili


Presentazione sul tema: "Programmazione in Java (9) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta I/O Evoluto Serializzazione Comunicazioni via socket JUnit."— Transcript della presentazione:

1 Programmazione in Java (9) Mauro Lorenzutti

2 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta I/O Evoluto Serializzazione Comunicazioni via socket JUnit

3 30/09/2005Corso Java - Mauro Lorenzutti3 I/O Progettare e implementare una gerarchia di classi per astrarre il device di I/O per la classe Persona Input da: Tastiera File Output su Video File

4 30/09/2005Corso Java - Mauro Lorenzutti4 Serializzazione Perché Concetti base Un po di codice Esercizio

5 30/09/2005Corso Java - Mauro Lorenzutti5 Persistenza degli oggetti Quando un programma termina tutti gli oggetti muoiono con lui Serve un meccanismo per salvare gli oggetti per farli vivere indipendentemente dal programma che li ha generati Questo fenomeno è detto persistenza degli oggetti

6 30/09/2005Corso Java - Mauro Lorenzutti6 Serializzazione Per ottenere la persistenza degli oggetti si può codificarli in un file e poi leggerli molto scomodo Si può serializzarli e scriverli in un file o inviarli attraverso la rete Serializzare un oggetto vuol dire rappresentarlo come una sequenza di byte Questa rappresentazione in byte può essere usata per ricostruire loggetto

7 30/09/2005Corso Java - Mauro Lorenzutti7 Serializzare su file FileOutputStream fos = new FileOutputStream(nomefile); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(oggetto);

8 30/09/2005Corso Java - Mauro Lorenzutti8 De-serializzare da file Il processo inverso: da un flusso di byte ricostruire loggetto originale FileInputStream fis = new FileInputStream(nomefile); ObjectInputStream ois = new ObjectInputStream(fis); TipoOggetto oggetto = (TipoOggetto)ois.readObject();

9 30/09/2005Corso Java - Mauro Lorenzutti9 Attenzione! Loggetto da serializzare e tutti i suoi attributi devono essere predisposti alla serializzazione public class Persona implements Serializable{ private static final long serialVersionUID = 1L;

10 30/09/2005Corso Java - Mauro Lorenzutti10 Escludere dal flusso È possibile in certi casi avere la necessità di escludere una variabile dal flusso di byte private transient String password;

11 30/09/2005Corso Java - Mauro Lorenzutti11 Esercizio Estendere la gerarchia di I/O per includere una classe che permetta il salvataggio su file di dati serializzati e la successiva lettura e ricostruzione di questi

12 30/09/2005Corso Java - Mauro Lorenzutti12 Comunicazione via socket Introduzione Socket ServerSocket Esercizio

13 30/09/2005Corso Java - Mauro Lorenzutti13 Comunicazioni in rete Far comunicare due programmi distinti attraverso una connessione di rete Socket È un ponte per comunicare È associata a un host e una porta

14 30/09/2005Corso Java - Mauro Lorenzutti14 Socket 1/4 Java mette a disposizione la classe Socket (socket client) per aprire un canale è necessario specificare host e porta Socket s = new Socket(localhost, 1555); Attenzione: le porte fra 0 e 1023 sono riservate

15 30/09/2005Corso Java - Mauro Lorenzutti15 Socket 2/4 È necessario specificare un timeout entro il quale i dati possono essere letti s.setSoTimeOut(30000); Allo scadere viene generata uneccezione InterruptedIOException

16 30/09/2005Corso Java - Mauro Lorenzutti16 Socket 3/4 Ora è possibile usare la socket per inviare e ricevere dati PrintStream out = new PrintStream(s.getOutputStream()); out.print(Stringa da inviare); BufferedReader r = new BufferedReader(new InputStreamReader(s.getInputStream())); boolean eof = false; while(!eof) { String riga = r.readLine(); if (riga!=null) System.out.println(riga); else eof = true; }

17 30/09/2005Corso Java - Mauro Lorenzutti17 Socket 4/4 Al termine è buona regola chiudere la connessione s.close();

18 30/09/2005Corso Java - Mauro Lorenzutti18 ServerSocket 1/2 Sono i socket lato server Un socket lato server controlla una porta TCP e avverte i tentativi di connessione da parte dei client Java mette a disposizione la classe ServerSocket

19 30/09/2005Corso Java - Mauro Lorenzutti19 ServerSocket 2/2 Le connessioni da parte dei client vengono accettate attraverso il metodo accept() Questo metodo restituisce un Socket per gestire la comunicazione ServerSocket server = new ServerSocket(1555); Server client = server.accept();

20 30/09/2005Corso Java - Mauro Lorenzutti20 Socket e serializzazione Anche in questo caso la serializzazione è molto comoda per permettere a due applicazioni lo scambio di oggetti via socket ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream()); oos.writeObject(p); ObjectInputStream ois = new ObjectInputStream(connection.getInputStream()); Persona p = (Persona)ois.readObject();

21 30/09/2005Corso Java - Mauro Lorenzutti21 Esercizio Estendere la classe IOEvoluto per gestire la comunicazione via socket degli oggetti di tipo persona


Scaricare ppt "Programmazione in Java (9) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta I/O Evoluto Serializzazione Comunicazioni via socket JUnit."

Presentazioni simili


Annunci Google