Ciao a tutti.
vorrei sapere perché si usa questo comando.
Ho cercato un po' su internet e mi sembra di avere capito che si usa per trasferire tutti i dati sul file specificato e svuotare la memoria. dico bene?
grazie.
Ciao a tutti.
vorrei sapere perché si usa questo comando.
Ho cercato un po' su internet e mi sembra di avere capito che si usa per trasferire tutti i dati sul file specificato e svuotare la memoria. dico bene?
grazie.
Riguarda i meccanismi di bufferizzazione.
Alcuni oggetti utilizzano sistemi di bufferizzazione per migliorare le prestazioni in scrittura (poco importa che si stia scrivendo in un file su disco, su una socket o altrove).
La bufferizzazione consiste nell'immagazzinare in memoria in un buffer i dati che vengono scritti fin quando il buffer non si riempie. Solo quando il buffer è pieno i dati vengono fisicamente trasferiti a destinazione. Questo migliora le performance perchè è più performante fare poche scritture di molti byte piuttosto che fare molte scritture di un (o pochi) byte.
Ovviamente, visto che la scrittura effettiva avviene solo quando il buffer è pieno, si rischia di non effettuare la scrittura per i pochi byte finali o per tutti i byte se questi sono meno della capienza del buffer (in quanto, se il buffer non è pieno, non viene scritto). In questi casi, si forza appunto un flush() che, in sostanza, dice al sistema di bufferizzazione di scrivere forzatamente i byte presenti nel buffer anche se questo non è pieno.
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
grazie leleFT, gentilissimo....
avevo intuito un qualcosa del genere... quindi và a fare una forzatura trasmettendo i dati a destinazione anche qualora il buffer non è pieno.
Esatto.
Generalmente lo si usa come ultima istruzione prima della chiusura dell'output, in modo da forzare la scrittura degli ultimi byte inviati (che potrebbero, appunto, non riempire il buffer).
Pseudocodice:
codice:try { apri_canale_output while( ci_sono_dati_da_scrivere ) { scrivi_su_output } flush() } catch (Exception e) { ... } finally { chiudi_canale_output }
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