Detaillierte Erklärung des Bufio-Pakets in Golang (3): bufio.Writer

Wenn Sie Golang zum Schreiben von Dateien verwenden und die Systemfunktion jedes Mal aufgerufen wird, um auf die Festplatte zu schreiben, wirkt sich dies in vielen Szenarien auf die Leistung des Programms aus. Der bufio.Writer im bufio-Paket bietet einen gepufferten Schreibvorgang. Bei der Ausführung eines Schreibvorgangs werden die Daten zuerst in einen Puffer geschrieben. Wenn eine bestimmte Bedingung erfüllt ist, z. B. wenn der Stream-Puffer voll ist oder der Puffer aktualisiert wird , dann Rufen Sie die Systemfunktion auf, um auf die Festplatte zu schreiben.

bufio.Autor

bufio.Writer ist eine Implementierung der io.Writer-Schnittstelle mit einem Puffer und bietet eine Reihe von Methoden zum effizienten Schreiben von Daten. Durch das Zwischenspeichern der geschriebenen Daten kann die Schreibeffizienz verbessert und die Anzahl der Systemaufrufe reduziert werden, wodurch die Programmleistung verbessert wird. Die Strukturdefinition und die entsprechenden Methoden lauten wie folgt:

type Writer struct {
	err error
	buf []byte
	n   int
	wr  io.Writer
}

Hier sind einige der wichtigsten von bufio.Writer bereitgestellten Methoden:

  • func (b *Writer) Write(p []byte) (nn int, err error), schreibe den Inhalt des Byte-Slice p in den Cache.

  • func (b *Writer) WriteString(s string) (int, error), schreibt einen String, gibt die Anzahl der geschriebenen Bytes und mögliche Fehler zurück.

  • func (b *Writer) WriteByte(c byte) Fehler, schreibe ein einzelnes Byte.

  • func (b *Writer) WriteRune(r rune) (size int, err error), WriteRune schreibt einen Unicode-Codewert, gibt die Anzahl der geschriebenen Bytes und mögliche Fehler zurück.

  • func (b *Writer) Flush()-Fehler, alle Daten im Cache werden in das zugrunde liegende io.Writer-Objekt geschrieben.

  • func (b *Writer) Available() int, gibt die Anzahl der Bytes im Puffer zurück, die noch geschrieben werden können.

  • func (b *Writer) Buffered() int, gibt die Anzahl der Bytes zurück, die in den Puffer geschrieben, aber noch nicht an den zugrunde liegenden io.Writer geleert wurden.

  • func (b *Writer) Reset(w io.Writer), setzt den Puffer auf leer zurück und setzt das zugrunde liegende io.Writer-Objekt auf w.

  • func (b *Writer) Size() int, gibt die Anzahl der Bytes im zugrunde liegenden Puffer zurück.

Ich werde die anderen Methoden nicht einzeln erklären. Es ist am besten, sie selbst zu sehen und anzuwenden, um sie zu erleben.

Anwendungsbeispiel

Ein einfaches Anwendungsbeispiel lautet wie folgt:

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	file, err := os.Create(" file.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()

	writer := bufio.NewWriter(file)
	writer.WriteString("路多辛的所思所想!\n")
	writer.Flush()
}

Verwenden Sie bufio.Writer, um die Zeichenfolge „Ludoxins Gedanken!“ zu schreiben, indem Sie ein bufio.Writer-Objekt instanziieren und die WriteString-Methode des Objekts aufrufen, um den Schreibvorgang abzuschließen, und schließlich die Flush-Methode verwenden, um die Daten im Cache zu leeren zugrunde liegendes io.Writer-Objekt.

Zusammenfassung

bufio.Writer bietet eine Implementierung der io.Writer-Schnittstelle mit Puffer, wodurch die Anzahl der Systemaufrufe reduziert und die Schreibleistung verbessert werden kann.

Guess you like

Origin blog.csdn.net/luduoyuan/article/details/131349439