Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457

    Utilità del metodo flush della classe PrintWriter java

    Buon pomeriggio a tutti,
    non comprendo appieno l'utilità del metodo flush della classe PrintWriter.
    Da una attenta ricerca in rete ho capito che il suddetto metodo svuota il buffer di scrittura memorizzando i dati sull'hard disk e liberando memoria (Ram).
    Non ho ben capito però il suo vantaggio, perchè nel corso dell'eleborazione di un programma dovrei eseguire un flush? Cosa mi cambia?


  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Generalizza il discorso e vedi cosa fa la classe

    Prints formatted representations of objects to a text-output stream.


    pensa al caso in cui il tuo output (quindi il file) per qualche motivo è l'input di un'altra applicazione: mi viene da pensare ad una applicazione che fa log e tu che ti metti in tail sul log.
    Puoi benissimo usare un printwriter per scrivere, senza flush succede che se il buffer non è pieno non riversi su file, non vedi tu l'output in tail.
    Se dopo ogni log (o dopo ogni 10 fai tu) fai un flush, quello va a finire subito su file e tu in tail ti vedi un aggiornamento reale.
    non sei obbligato a fare flush, in realtà se vuoi essere sicuro che ogni output non resti in attesa è buona norma utilizzarlo.
    Ne ho altri di casi d'uso, prova a pensare di inviare testo tra due nodi...lasci l'altro capo in attesa che tu riempi il buffer?

    Oltrettutto, non ragionare come se avessi risorse infinite, anzi al contrario. Tenere risorse occupate o in attesa di un riempimento del buffer o della fine dello stream è uno spreco.
    RTFM Read That F*** Manual!!!

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    C'è anche un altro dettaglio.
    E' sempre buona norma richiamare un flush() prima del close() perchè nessuno ti garantisce che i dati eventualmente presenti nel buffer e non ancora inviati, vengano effettivamente scritti. La documentazione di close() dice che vengono rilasciate tutte le risorse: non parla di alcun flush() durante questa operazione. Quindi, se ci sono dati nel buffer che non sono stati ancora scritti, la close() li può tranquillamente buttare via.

    Risultato: il tuo programma ha inviato correttamente tutti i dati al PrintWriter e sul file risultante, alla fine dell'elaborazione, ti mancano gli ultimi... non bello.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.