Wat is het doel van flush() in Java-streams?

In Java wordt de methode flush()gebruikt in streams. Maar ik begrijp niet wat het doel is van het gebruik van deze methode?

fin.flush();

vertel me wat suggesties.


Antwoord 1, autoriteit 100%

Van de docsvan de flushmethode:

Flusht de uitvoerstroom en dwingt eventuele gebufferde uitvoerbytes om te worden weggeschreven. Het algemene contract van flush is dat het aanroepen ervan een indicatie is dat, als eerder geschreven bytes zijn gebufferd door de implementatie van de uitvoerstroom, dergelijke bytes onmiddellijk naar hun beoogde bestemming moeten worden geschreven.

Het bufferen wordt voornamelijk gedaan om de I/O-prestaties te verbeteren. Meer hierover kunt u lezen in dit artikel: Java I/O-prestaties afstemmen.


Antwoord 2, autoriteit 27%

Als u gegevens naar een stream schrijft, worden deze niet onmiddellijk weggeschreven en worden ze gebufferd. Gebruik dus flush()wanneer u er zeker van moet zijn dat al uw gegevens uit de buffer zijn weggeschreven.

We moeten er zeker van zijn dat alle schrijfbewerkingen zijn voltooid voordat we de stream sluiten, en daarom wordt flush()aangeroepen in de close().

Maar als je een vereiste hebt dat al je schrijfbewerkingen op elk moment worden opgeslagen voordat je de stream sluit, gebruik dan flush().


Antwoord 3, autoriteit 25%

Als we een commando geven, worden de streams van dat commando opgeslagen in de geheugenlocatie die buffer wordt genoemd (een tijdelijke geheugenlocatie) op onze computer. Wanneer alle tijdelijke geheugenlocaties vol zijn, gebruiken we flush(), die alle gegevensstromen doorspoelt en volledig uitvoert en een nieuwe ruimte geeft aan nieuwe stromen op de tijdelijke bufferlocatie.
-Hoop dat je het begrijpt


Antwoord 4, autoriteit 6%

Als de buffer vol is, worden alle strings die erop zijn gebufferd, op de schijf opgeslagen. Buffers worden gebruikt om Big Deals te vermijden! en overhead.

In de klasse BufferedWriter die in java-bibliotheken is geplaatst, is er één regel zoals:

private static int defaultCharBufferSize = 8192;

Als je gegevens wilt verzenden voordat de buffer vol is, heb je de controle. Spoel het gewoon door. Aanroepen naar writer.flush() zeggen: “stuur wat er in de buffer zit, nu!

referentieboek: https://www.amazon.com/Head-First-Java -Kathy-Sierra/dp/0596009208

pages:453


Antwoord 5, autoriteit 4%

Streams worden vaak benaderd door threads die periodiek hun inhoud leegmaken en deze bijvoorbeeld op het scherm weergeven, naar een socket sturen of naar een bestand schrijven. Dit wordt gedaan om prestatieredenen. Het doorspoelen van een uitvoerstroom betekent dat u wilt stoppen, wachten tot de inhoud van de stream volledig naar de bestemming is overgebracht en vervolgens de uitvoering hervatten terwijl de stream leeg is en de inhoud is verzonden.


Antwoord 6, autoriteit 3%

Voor prestatieproblemen moeten de eerste gegevens in Buffer worden geschreven. Wanneer de buffer vol raakt, worden de gegevens naar de uitvoer geschreven (Bestand, console enz.). Wanneer de buffer gedeeltelijk gevuld is en u deze naar output (bestand, console) wilt sturen, moet u de methode flush() handmatig aanroepen om een gedeeltelijk gevulde buffer naar uitvoer (bestand, console) te schrijven.


Antwoord 7

Naast andere goede antwoorden hier, maakte deze uitleg dingen glashelder voor mij:

Een buffer is een gedeelte in het geheugen dat wordt gebruikt om een gegevensstroom op te slaan
(karakters). Deze karakters worden soms alleen naar een
uitvoerapparaat (bijv. monitor) wanneer de buffer vol is of voldoet aan een
bepaald aantal tekens. Dit kan ervoor zorgen dat uw systeem achterloopt als u
u hoeft slechts een paar tekens naar een uitvoerapparaat te sturen. De spoeling()
methode zal de inhoud van de buffer onmiddellijk naar de uitvoer spoelen
streamen.

Bron: https://www.youtube.com/watch?v=MjK3dZTc0Lg

Other episodes