1 / 21

Programmazione in Java (9)

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.

thane
Télécharger la présentation

Programmazione in Java (9)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmazionein Java (9) Mauro Lorenzutti

  2. Scaletta • I/O Evoluto • Serializzazione • Comunicazioni via socket • JUnit 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 Corso Java - Mauro Lorenzutti

  4. Serializzazione • Perché • Concetti base • Un po’ di codice • Esercizio 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 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 Corso Java - Mauro Lorenzutti

  7. Serializzare su file FileOutputStream fos = new FileOutputStream(nomefile); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(oggetto); 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(); 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; 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; 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 Corso Java - Mauro Lorenzutti

  12. Comunicazione via socket • Introduzione • Socket • ServerSocket • Esercizio 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 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 porta Socket s = new Socket(“localhost”, 1555); • Attenzione: le porte fra 0 e 1023 sono riservate Corso Java - Mauro Lorenzutti

  15. Socket 2/4 • È necessario specificare un timeout entro il quale i dati possono essere letti s.setSoTimeOut(30000); • Allo scadere viene generata un’eccezione InterruptedIOException Corso Java - Mauro Lorenzutti

  16. 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; } Corso Java - Mauro Lorenzutti

  17. Socket 4/4 • Al termine è buona regola chiudere la connessione s.close(); 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 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(); 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(); Corso Java - Mauro Lorenzutti

  21. Esercizio • Estendere la classe IOEvoluto per gestire la comunicazione via socket degli oggetti di tipo persona Corso Java - Mauro Lorenzutti

More Related