programmazione in java (9)

21
Programmazione in Java (9) Mauro Lorenzutti

Upload: thane

Post on 14-Jan-2016

54 views

Category:

Documents


0 download

DESCRIPTION

Programmazione in Java (9). Mauro Lorenzutti. Scaletta. I/O Evoluto Serializzazione Comunicazioni via socket JUnit. 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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programmazione in Java (9)

Programmazionein Java (9)

Mauro Lorenzutti

Page 2: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 2

Scaletta I/O Evoluto Serializzazione Comunicazioni via socket JUnit

Page 3: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 3

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

Page 4: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 4

Serializzazione Perché Concetti base Un po’ di codice Esercizio

Page 5: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 5

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

Page 6: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 6

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 l’oggetto

Page 7: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 7

Serializzare su file

FileOutputStream fos = new FileOutputStream(nomefile);

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(oggetto);

Page 8: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 8

De-serializzare da file Il processo inverso: da un flusso di byte

ricostruire l’oggetto originale

FileInputStream fis = new FileInputStream(nomefile);

ObjectInputStream ois = new ObjectInputStream(fis);

TipoOggetto oggetto = (TipoOggetto)ois.readObject();

Page 9: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 9

Attenzione! L’oggetto da serializzare e tutti i suoi

attributi devono essere predisposti alla serializzazione

public class Persona implements Serializable{

private static final long serialVersionUID = 1L;

Page 10: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 10

Escludere dal flusso È possibile in certi casi avere la

necessità di escludere una variabile dal flusso di byte

private transient String password;

Page 11: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 11

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

Page 12: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 12

Comunicazione via socket Introduzione Socket ServerSocket Esercizio

Page 13: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 13

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

Page 14: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 14

Socket 1/4 Java mette a disposizione la classe

Socket (socket client) per aprire un canale è necessario

specificare host e portaSocket s = new Socket(“localhost”, 1555);

Attenzione: le porte fra 0 e 1023 sono riservate

Page 15: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 15

Socket 2/4 È necessario specificare un timeout

entro il quale i dati possono essere lettis.setSoTimeOut(30000);

Allo scadere viene generata un’eccezione InterruptedIOException

Page 16: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 16

Socket 3/4 Ora è possibile usare la socket per inviare e

ricevere datiPrintStream 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;}

Page 17: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 17

Socket 4/4 Al termine è buona regola chiudere

la connessione

s.close();

Page 18: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 18

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

Page 19: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 19

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();

Page 20: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 20

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();

Page 21: Programmazione in Java (9)

30/09/2005 Corso Java - Mauro Lorenzutti 21

Esercizio Estendere la classe IOEvoluto per

gestire la comunicazione via socket degli oggetti di tipo persona