I/O wrapping

di il
1 risposte

I/O wrapping

Come da titolo, vorrei sapere come capire la gerarchia delle classi di Input/Output e relative Filter...in generale trovo che convegna sempre wrappare tutto in un BufferedReader in lettura e BufferedWriter in scrittura, ma a volte sono wrappate con altre classi a seconda dell'utilizzo da fare. Vorrei capire l'ordine di wrapping e come usare queste classi. Grazie a chi mi potrà aiutare.

ps: inoltre da quel che ho capito, queste classi servono solo a gestire gli stream. Se io volessi poi leggere realmente ad esempio una stringa contenuta in un file, devo creare un'altra variabile dove memorizzare la readLine() o una read() chiamata sul Buffer creato, corretto?

1 Risposte

  • Re: I/O wrapping

    mark9 ha scritto:


    Vorrei capire l'ordine di wrapping e come usare queste classi.
    Non è che c'è un "ordine" ... dipende da cosa devi fare. A parte alcune classi particolari (es. File, RandomAccessFile), il concetto essenziale è che tutte le classi di I/O nel package java.io sono "modellate" secondo il noto Design Pattern "Decorator".

    https://it.wikipedia.org/wiki/Decorato

    Con questa filosofia, ciascuna classe si occupa principalmente di UN aspetto specifico del I/O. Se cerchi ad esempio una singola classe che sappia fare: leggere da file, bufferizzare, leggere a righe. Questa singola classe NON esiste.
    C'è una classe che "sa" solo leggere caratteri da file, FileReader (oltretutto solo con il charset predefinito). C'è una classe che "sa" solo bufferizzare, BufferedReader (e come "plus" sa leggere a righe). E allora le puoi comporre insieme, crei un FileReader e lo incapsuli in un BufferedReader.

    Si possono fare molte "catene" di classi di I/O. E certe non hanno senso. Non ha senso ad esempio incapsulare un DataInputStream dentro un BufferedInputStream. La peculiarità di DataInputStream è di fornire una API più "espansa" per avere metodi come readInt(), readDouble(), ecc...
    Se la incapsuli in un BufferedInputStream, non "vedi" più nulla di questo e DataInputStream farebbe solo da (inutile) "passacarte" di byte.

    mark9 ha scritto:


    devo creare un'altra variabile dove memorizzare la readLine()
    Ma questo è ovvio ... readLine() restituisce un oggetto String (la riga letta). Lo devi assegnare o passare altrove per fare qualcosa di utile (a meno che vuoi leggere una riga "a vuoto", senza farci nulla).
Devi accedere o registrarti per scrivere nel forum
1 risposte