SlideShare una empresa de Scribd logo
1 de 26
Lezione 1: Introduzione
        Corso di Programmazione in Rete
       Laurea Magistrale in Ing. Informatica
         Università degli Studi di Salerno



1
Outline
    ✦ Presentazione del corso

    ✦ Riepilogo dell’I/O in Java

    ✦ Riepilogo dei Thread in Java




2
Presentazione del corso

    ✦ Obiettivi
     •   Apprendere le principali tecnologie per la
         realizzazione di applicazioni distribuite
    ✦ Prerequisiti
     •   Linguaggio Java
     •   Concetti di base sulle reti di calcolatori e sui
         protocolli di Internet




3
Presentazione del corso


    ✦ Materiale didattico
     •   Libro di testo da definire
    ✦ Modalità di esame
     •   Elaborato + Colloquio orale




4
Input/output in Java
    ✦ La libreria standard Java definisce
      numerose classi per gestire l’I/O
     •   modularità: separazione in classi diverse di
         aspetti quali l’origine/destinazione dell’I/O, il
         formato dei dati, il buffering
     •   componibilità: le funzioni delle diverse classi
         possono essere combinate (attraverso il pattern
         “Adapter”)
    ✦ Distinzione tra I/O in termini di byte e I/O
      in termini di caratteri (per gestire
      correttamente l’internazionalizzazione)

5
Input/Output binario

    ✦ Tutte le classi che considereremo sono nel
      package java.io
    ✦ Le classi di base della gerarchia sono
      InputStream e OutputStream, che
      rappresentano oggetti dai quali è
      possibile leggere o sui quali è possibile
      scrivere sequenze di byte



6
Input/Output binario
    ✦ Metodi principali di InputStream:
     •   int read()
         ‣   Restituisce il valore del byte letto, o -1

     •   void close()
    ✦ Metodi principali di OutputStream:
     •   void write(int b)
     •   void close()
    ✦ I metodi possono lanciare un’eccezione
      (controllata) di tipo IOException

7
Input/Output binario
        ✦ Esempio



    import java.io.*;

    public class IOEsempio1 {
    	 public static void copia(InputStream in, OutputStream out) throws IOException {
    	 	 int b;
    	 	 while ((b=in.read())!=-1)
    	 	 	 out.write(b);
    	 }
    	
    	 public static void main(String args[]) throws IOException {
    	 	 copia(System.in, System.out);
    	 }
    }




8
Input/Output binario
    ✦ InputStream e OutputStream sono classi
      astratte
    ✦ Le sottoclassi concrete rappresentano
      stream di input/output associati a
      particolari sorgenti/destinazioni di byte
      (es. file, connessioni di rete, aree di
      memoria)
    ✦ System.in e System.out sono oggetti di
      classi derivanti da InputStream e
      OutputStream

9
I/O binario su file
     ✦ Le classi FileInputStream e
       FileOutputStream rappresentano stream
       associati a file
     ✦ Costruttori:
      •   FileInputStream(String fileName)
      •   FileOutputStream(String fileName)
      •   FileOutputStream(String filename, boolean
          append)
          ‣   Se append è true, l’output va in coda al file già esistente



10
I/O binario su file
        ✦ Esempio
     import java.io.*;

     public class IOEsempio2 {
     	 public static void copia(InputStream in, OutputStream out) throws IOException {
     	 	 int b;
     	 	 while ((b=in.read())!=-1)
     	 	 	 out.write(b);
     	 	 in.close();
     	 	 out.close();
     	 }
     	
     	 public static void main(String args[]) throws IOException {
     	 	 FileInputStream in=new FileInputStream(args[0]);
     	 	 FileOutputStream out=new FileOutputStream(args[1]);
     	 	 copia(in, out);
     	 }
     }




11
I/O su array di byte
     ✦ Le classi ByteArrayInputStream e
       ByteArrayOutputStream consentono di
       effettuare operazioni di I/O in memoria,
       utilizzando come supporto un array di
       byte
     ✦ Costruttori
      •   ByteArrayInputStream(byte[] array)
      •   ByteArrayInputStream(byte [] array[], int offset,
          int len)
      •   ByteArrayOutputStream()
          ‣   Accesso all’array prodotto col metodo byte[] toByteArray()
12
I/O su array di byte
        ✦ Esempio
     import java.io.*;

     public class IOEsempio3 {
     	 public static void copia(InputStream in, OutputStream out) throws IOException {
     	 	 int b;
     	 	 while ((b=in.read())!=-1)
     	 	 	 out.write(b);
     	 }
     	
     	 public static void main(String args[]) throws IOException {
     	 	 byte[] a={'H', 'e', 'l', 'l', 'o', 'n' };
     	 	 ByteArrayInputStream in=new ByteArrayInputStream(a);
     	 	 copia(in, System.out);
     	 }
     }




13
I/O binario di altri tipi
     ✦ Le classi DataInputStream e
       DataOutputStream consentono di leggere
       dati dei tipi primitivi (in formato binario)
     ✦ Costruttori:
      •   DataInputStream(InputStream in)
      •   DataOutputStream(OutputStream out)
     ✦ Metodi
      •   int readInt(); char readChar(); ...
          ‣   eccezione EOFException su fine del file

      •   void writeInt(int i); void writeChar(char c); ...

14
I/O bufferizzato

     ✦ Le classi BufferedInputStream e
       BufferedOutputStream consentono la
       bufferizzazione dell’I/O
     ✦ Costruttori:
      •   BufferedInputStream(InputStream in)
      •   BufferedOutputStream(OutputStream out)




15
Combinazione delle funzioni
         ✦ Le varie classi viste finora possono
           lavorare insieme creando una “catena di
           montaggio”
         ✦ Esempio: come faccio a leggere un
           insieme di interi (in binario) da un file
           usando un input bufferizzato?
     	   public static void main(String args[]) throws IOException {
     	   	 DataInputStream din=new DataInputStream(
                        new BufferedInputStream(
                             new FileInputStream(args[0])));
     	   	 int x=din.readInt();
             // ... etc etc ...
     	   }

16
I/O di caratteri
     ✦ Internamente Java rappresenta i caratteri
       usando il sistema Unicode
      •   Unicode gestisce correttamente i caratteri delle
          lingue non europee
     ✦ Problema: i dispositivi di I/O lavorano in
       termini di byte, non in termini di caratteri
       Unicode
     ✦ Occorre una codifica (“encoding”) per
       specificare come ciascun carattere viene
       tradotto in una sequenza di byte
      •   sfortunatamente, non esiste una codifica unica
          accettata come standard da tutte le piattaforme
17
I/O di caratteri
     ✦ Alcune codifiche utilizzate
       frequentemente:
      •   ISO-Latin-1 (ISO-8859-1)
          ‣   1 byte per carattere, consente solo la codifica dei caratteri
              dell’Europa occidentale

      •   UTF-8
          ‣   da 1 a 3 byte per carattere (lunghezza variabile)
          ‣   i caratteri ASCII sono codificati con 1 byte, mantenendo la
              compatibilità all’indietro con il set ASCII

      •   UTF-16BE, UTF-16LE
          ‣   codifica a lunghezza variabile in multipli di 16 bit
          ‣   BE=big endian, LE=little endian
18
I/O di caratteri
     ✦ Java mette a disposizione due classi base,
       Reader e Writer, che effettuano l’I/O in
       termini di caratteri anziché byte
     ✦ È possibile costruire Reader/Writer da
       InputStream/OutputStream specificando
       la codifica da usare
      •   se la codifica non è specificata si usa un default
          dipendente dalla piattaforma corrente
          (sconsigliato)


19
I/O di caratteri
     ✦ Le classi InputStreamReader e
       OutputStreamWriter rappresentano un
       Reader/Writer agganciato a un
       InputStream/OutputStream
     ✦ Costruttori:
      •   InputStreamReader(InputStream in, String
          encoding)
      •   OutputStreamWriter(OutputStream out, String
          encoding)


20
I/O di caratteri
        ✦ Esempio
     import java.io.*;

     public class IOEsempio4 {
     	 public static void copia(Reader in, Writer out) throws IOException {
     	 	 int c;
     	 	 while ((c=in.read())!=-1)
     	 	 	 out.write(copia);
     	 	 in.close();
     	 	 out.close();
     	 }
     	
     	 public static void main(String args[]) throws IOException {
     	 	 InputStreamReader r=new InputStreamReader(System.in, "UTF-8");
     	 	 OutputStreamWriter w=new OutputStreamWriter(System.out, "UTF-8");
     	 	 copia(r, w);
     	 }
     }



21
I/O di caratteri
     ✦ Le classi FileReader e FileWriter sono
       classi di comodo per associare un reader/
       writer a un file
     ✦ Le classi BufferedReader e BufferedWriter
       realizzano il buffering
     ✦ Le classi StringReader e StringWriter
       effettuano l’I/O su stringhe
     ✦ La classe PrintWriter mette a disposizione
       i metodi print(...) e println(...) per
       stampare dati di vari tipi in formato testo
22
Serializzazione

     ✦ Java dispone di un meccanismo detto
       serializzazione per convertire un oggetto
       in una sequenza di byte e viceversa
     ✦ Utile, ad es. per salvare oggetti su un file
       o trasmetterli attraverso una connessione
       di rete



23
Serializzazione


     ✦ Ogni classe può essere serializzata,
       purché implementi l’interfaccia
       Serializable (definita in java.io)
     ✦ Serializable è un’interfaccia “marker”,
       ovvero non definisce nessun metodo




24
Serializzazione
     ✦ Le classi ObjectOutputStream e
       ObjectInputStream consentono di fare la
       serializzazione
     ✦ Metodi di ObjectOutputStream
      •   tutti i metodi di DataOutputStream +
      •   void writeObject(Object obj)
     ✦ Metodi di ObjectInputStream
      •   tutti i metodi di DataInputStream +
      •   Object readObject()


25
Serializzazione
        ✦ Esempio
     import java.io.*;
     public class IOEsempio5 implements Serializable {
     	 public int dato;
     	
     	 public IOEsempio5(int d) {
     	 	 dato=d;
     	 }
     	
     	 public static void main(String args[]) throws IOException {
     	 	 ObjectOutputStream out=new ObjectOutputStream(
     	 	 	 	 new FileOutputStream(args[0]));
     	 	 IOEsempio5 obj=new IOEsempio5(4242);
     	 	 out.writeObject(obj);
     	 	 out.close();
     	 }	
     }


26

Más contenido relacionado

La actualidad más candente

La actualidad más candente (7)

Py t2 python-moduli
Py t2 python-moduliPy t2 python-moduli
Py t2 python-moduli
 
Py a4 python-file
Py a4 python-filePy a4 python-file
Py a4 python-file
 
2006 Py04 avanzato
2006 Py04 avanzato2006 Py04 avanzato
2006 Py04 avanzato
 
2006 Py03 intermedio
2006 Py03 intermedio2006 Py03 intermedio
2006 Py03 intermedio
 
2006 Py01 intro
2006 Py01 intro2006 Py01 intro
2006 Py01 intro
 
2011.02.19 Introducing F#
2011.02.19 Introducing F#2011.02.19 Introducing F#
2011.02.19 Introducing F#
 
Py a2 python-documentazione
Py a2 python-documentazionePy a2 python-documentazione
Py a2 python-documentazione
 

Destacado

(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...Raffaella D'angelo
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggettimariacaporale
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliAndrea Della Corte
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingAndrea Della Corte
 

Destacado (8)

(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...(E book ita) java   introduzione alla programmazione orientata ad oggetti in ...
(E book ita) java introduzione alla programmazione orientata ad oggetti in ...
 
Corso java base
Corso java baseCorso java base
Corso java base
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggetti
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
 
Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme Programming
 

Similar a Lezione 1: I/O in Java

lezione1.pdf
lezione1.pdflezione1.pdf
lezione1.pdfdttdigi
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...UltraUploader
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionAndrea Della Corte
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - TheoryNaLUG
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e FileMajong DevJfu
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@UninaNaLUG
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++Majong DevJfu
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)STELITANO
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5Matteo Baccan
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]Matteo Collica
 
Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio JavaPaolo Tosato
 

Similar a Lezione 1: I/O in Java (20)

Java lezione 6
Java lezione 6Java lezione 6
Java lezione 6
 
Java Lezione 1
Java Lezione 1Java Lezione 1
Java Lezione 1
 
lezione1.pdf
lezione1.pdflezione1.pdf
lezione1.pdf
 
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...[Ebook   ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
[Ebook ita - security] introduzione alle tecniche di exploit - mori - ifoa ...
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - Theory
 
14 - Programmazione: Stream e File
14 - Programmazione: Stream e File14 - Programmazione: Stream e File
14 - Programmazione: Stream e File
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++13 - Programmazione: Compendio C - C++
13 - Programmazione: Compendio C - C++
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
Corso c++
Corso c++Corso c++
Corso c++
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 
Pycon
PyconPycon
Pycon
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
Introduzione al linguaggio Java
Introduzione al linguaggio JavaIntroduzione al linguaggio Java
Introduzione al linguaggio Java
 

Más de Andrea Della Corte

Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingAndrea Della Corte
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaAndrea Della Corte
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Andrea Della Corte
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in JavaAndrea Della Corte
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceAndrea Della Corte
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLAndrea Della Corte
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationAndrea Della Corte
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTAndrea Della Corte
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPAndrea Della Corte
 

Más de Andrea Della Corte (16)

Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLSLezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLS
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in Java
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in Java
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSL
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method Invocation
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in REST
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDP
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Último

ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxlorenzodemidio01
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxlorenzodemidio01
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................giorgiadeascaniis59
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoyanmeng831
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.camillaorlando17
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxtecongo2007
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxlorenzodemidio01
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxtecongo2007
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxlorenzodemidio01
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxlorenzodemidio01
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxlorenzodemidio01
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileNicola Rabbi
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaSalvatore Cianciabella
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxtecongo2007
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....giorgiadeascaniis59
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................giorgiadeascaniis59
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxlorenzodemidio01
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxtecongo2007
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxlorenzodemidio01
 

Último (19)

ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Quadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceoQuadrilateri e isometrie studente di liceo
Quadrilateri e isometrie studente di liceo
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptxLorenzo D'Emidio_Vita e opere di Aristotele.pptx
Lorenzo D'Emidio_Vita e opere di Aristotele.pptx
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptxLorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
Lorenzo D'Emidio- Lavoro sulla Bioarchittetura.pptx
 
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptxLorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
Lorenzo D'Emidio_Vita di Cristoforo Colombo.pptx
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
Presentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione CivicaPresentazioni Efficaci e lezioni di Educazione Civica
Presentazioni Efficaci e lezioni di Educazione Civica
 
discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Lorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptxLorenzo D'Emidio_Francesco Petrarca.pptx
Lorenzo D'Emidio_Francesco Petrarca.pptx
 

Lezione 1: I/O in Java

  • 1. Lezione 1: Introduzione Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ Presentazione del corso ✦ Riepilogo dell’I/O in Java ✦ Riepilogo dei Thread in Java 2
  • 3. Presentazione del corso ✦ Obiettivi • Apprendere le principali tecnologie per la realizzazione di applicazioni distribuite ✦ Prerequisiti • Linguaggio Java • Concetti di base sulle reti di calcolatori e sui protocolli di Internet 3
  • 4. Presentazione del corso ✦ Materiale didattico • Libro di testo da definire ✦ Modalità di esame • Elaborato + Colloquio orale 4
  • 5. Input/output in Java ✦ La libreria standard Java definisce numerose classi per gestire l’I/O • modularità: separazione in classi diverse di aspetti quali l’origine/destinazione dell’I/O, il formato dei dati, il buffering • componibilità: le funzioni delle diverse classi possono essere combinate (attraverso il pattern “Adapter”) ✦ Distinzione tra I/O in termini di byte e I/O in termini di caratteri (per gestire correttamente l’internazionalizzazione) 5
  • 6. Input/Output binario ✦ Tutte le classi che considereremo sono nel package java.io ✦ Le classi di base della gerarchia sono InputStream e OutputStream, che rappresentano oggetti dai quali è possibile leggere o sui quali è possibile scrivere sequenze di byte 6
  • 7. Input/Output binario ✦ Metodi principali di InputStream: • int read() ‣ Restituisce il valore del byte letto, o -1 • void close() ✦ Metodi principali di OutputStream: • void write(int b) • void close() ✦ I metodi possono lanciare un’eccezione (controllata) di tipo IOException 7
  • 8. Input/Output binario ✦ Esempio import java.io.*; public class IOEsempio1 { public static void copia(InputStream in, OutputStream out) throws IOException { int b; while ((b=in.read())!=-1) out.write(b); } public static void main(String args[]) throws IOException { copia(System.in, System.out); } } 8
  • 9. Input/Output binario ✦ InputStream e OutputStream sono classi astratte ✦ Le sottoclassi concrete rappresentano stream di input/output associati a particolari sorgenti/destinazioni di byte (es. file, connessioni di rete, aree di memoria) ✦ System.in e System.out sono oggetti di classi derivanti da InputStream e OutputStream 9
  • 10. I/O binario su file ✦ Le classi FileInputStream e FileOutputStream rappresentano stream associati a file ✦ Costruttori: • FileInputStream(String fileName) • FileOutputStream(String fileName) • FileOutputStream(String filename, boolean append) ‣ Se append è true, l’output va in coda al file già esistente 10
  • 11. I/O binario su file ✦ Esempio import java.io.*; public class IOEsempio2 { public static void copia(InputStream in, OutputStream out) throws IOException { int b; while ((b=in.read())!=-1) out.write(b); in.close(); out.close(); } public static void main(String args[]) throws IOException { FileInputStream in=new FileInputStream(args[0]); FileOutputStream out=new FileOutputStream(args[1]); copia(in, out); } } 11
  • 12. I/O su array di byte ✦ Le classi ByteArrayInputStream e ByteArrayOutputStream consentono di effettuare operazioni di I/O in memoria, utilizzando come supporto un array di byte ✦ Costruttori • ByteArrayInputStream(byte[] array) • ByteArrayInputStream(byte [] array[], int offset, int len) • ByteArrayOutputStream() ‣ Accesso all’array prodotto col metodo byte[] toByteArray() 12
  • 13. I/O su array di byte ✦ Esempio import java.io.*; public class IOEsempio3 { public static void copia(InputStream in, OutputStream out) throws IOException { int b; while ((b=in.read())!=-1) out.write(b); } public static void main(String args[]) throws IOException { byte[] a={'H', 'e', 'l', 'l', 'o', 'n' }; ByteArrayInputStream in=new ByteArrayInputStream(a); copia(in, System.out); } } 13
  • 14. I/O binario di altri tipi ✦ Le classi DataInputStream e DataOutputStream consentono di leggere dati dei tipi primitivi (in formato binario) ✦ Costruttori: • DataInputStream(InputStream in) • DataOutputStream(OutputStream out) ✦ Metodi • int readInt(); char readChar(); ... ‣ eccezione EOFException su fine del file • void writeInt(int i); void writeChar(char c); ... 14
  • 15. I/O bufferizzato ✦ Le classi BufferedInputStream e BufferedOutputStream consentono la bufferizzazione dell’I/O ✦ Costruttori: • BufferedInputStream(InputStream in) • BufferedOutputStream(OutputStream out) 15
  • 16. Combinazione delle funzioni ✦ Le varie classi viste finora possono lavorare insieme creando una “catena di montaggio” ✦ Esempio: come faccio a leggere un insieme di interi (in binario) da un file usando un input bufferizzato? public static void main(String args[]) throws IOException { DataInputStream din=new DataInputStream( new BufferedInputStream( new FileInputStream(args[0]))); int x=din.readInt(); // ... etc etc ... } 16
  • 17. I/O di caratteri ✦ Internamente Java rappresenta i caratteri usando il sistema Unicode • Unicode gestisce correttamente i caratteri delle lingue non europee ✦ Problema: i dispositivi di I/O lavorano in termini di byte, non in termini di caratteri Unicode ✦ Occorre una codifica (“encoding”) per specificare come ciascun carattere viene tradotto in una sequenza di byte • sfortunatamente, non esiste una codifica unica accettata come standard da tutte le piattaforme 17
  • 18. I/O di caratteri ✦ Alcune codifiche utilizzate frequentemente: • ISO-Latin-1 (ISO-8859-1) ‣ 1 byte per carattere, consente solo la codifica dei caratteri dell’Europa occidentale • UTF-8 ‣ da 1 a 3 byte per carattere (lunghezza variabile) ‣ i caratteri ASCII sono codificati con 1 byte, mantenendo la compatibilità all’indietro con il set ASCII • UTF-16BE, UTF-16LE ‣ codifica a lunghezza variabile in multipli di 16 bit ‣ BE=big endian, LE=little endian 18
  • 19. I/O di caratteri ✦ Java mette a disposizione due classi base, Reader e Writer, che effettuano l’I/O in termini di caratteri anziché byte ✦ È possibile costruire Reader/Writer da InputStream/OutputStream specificando la codifica da usare • se la codifica non è specificata si usa un default dipendente dalla piattaforma corrente (sconsigliato) 19
  • 20. I/O di caratteri ✦ Le classi InputStreamReader e OutputStreamWriter rappresentano un Reader/Writer agganciato a un InputStream/OutputStream ✦ Costruttori: • InputStreamReader(InputStream in, String encoding) • OutputStreamWriter(OutputStream out, String encoding) 20
  • 21. I/O di caratteri ✦ Esempio import java.io.*; public class IOEsempio4 { public static void copia(Reader in, Writer out) throws IOException { int c; while ((c=in.read())!=-1) out.write(copia); in.close(); out.close(); } public static void main(String args[]) throws IOException { InputStreamReader r=new InputStreamReader(System.in, "UTF-8"); OutputStreamWriter w=new OutputStreamWriter(System.out, "UTF-8"); copia(r, w); } } 21
  • 22. I/O di caratteri ✦ Le classi FileReader e FileWriter sono classi di comodo per associare un reader/ writer a un file ✦ Le classi BufferedReader e BufferedWriter realizzano il buffering ✦ Le classi StringReader e StringWriter effettuano l’I/O su stringhe ✦ La classe PrintWriter mette a disposizione i metodi print(...) e println(...) per stampare dati di vari tipi in formato testo 22
  • 23. Serializzazione ✦ Java dispone di un meccanismo detto serializzazione per convertire un oggetto in una sequenza di byte e viceversa ✦ Utile, ad es. per salvare oggetti su un file o trasmetterli attraverso una connessione di rete 23
  • 24. Serializzazione ✦ Ogni classe può essere serializzata, purché implementi l’interfaccia Serializable (definita in java.io) ✦ Serializable è un’interfaccia “marker”, ovvero non definisce nessun metodo 24
  • 25. Serializzazione ✦ Le classi ObjectOutputStream e ObjectInputStream consentono di fare la serializzazione ✦ Metodi di ObjectOutputStream • tutti i metodi di DataOutputStream + • void writeObject(Object obj) ✦ Metodi di ObjectInputStream • tutti i metodi di DataInputStream + • Object readObject() 25
  • 26. Serializzazione ✦ Esempio import java.io.*; public class IOEsempio5 implements Serializable { public int dato; public IOEsempio5(int d) { dato=d; } public static void main(String args[]) throws IOException { ObjectOutputStream out=new ObjectOutputStream( new FileOutputStream(args[0])); IOEsempio5 obj=new IOEsempio5(4242); out.writeObject(obj); out.close(); } } 26