Heim  >  Artikel  >  Backend-Entwicklung  >  Konvertieren von „bufio.Reader“ in „io.ReadWriteCloser“.

Konvertieren von „bufio.Reader“ in „io.ReadWriteCloser“.

王林
王林nach vorne
2024-02-05 22:48:07843Durchsuche

从 `bufio.Reader` 转换为 `io.ReadWriteCloser`

Frageninhalt

Ich habe einen io.readwritecloser und möchte einen Blick darauf werfen, ohne die Leser voranzubringen,

Also verwende ich

bi := bufio.NewReader(i)
bi.Peek(1)

So weit so gut, aber wenn ich dann das Original io.readwritecloser (i) 时,它只有 eof (i) wiederverwenden möchte, hat es nur eof.

Meine Frage ist also, wie man von bufio.reader zurück in bufio.reader 转换回 io.readwritecloser


Richtige Antwort


konvertiert. Da bufio.reader die Daten vom zugrunde liegenden Reader puffert, muss die Anwendung dies nach dem Aufruf von peek tun Daten aus bufio.reader lesen.

Um einen io.readwritecloser zu erhalten, der dies tut, verpacken Sie bufio.reader und den ursprünglichen io.readwritecloser:

// bufferedreadwritecloser has all of the methods
// from *bufio.reader and io.readwritecloser.
type bufferedreadwritecloser struct {
    *bufio.reader
    io.readwritecloser
}

func (rw *bufferedreadwritecloser) read(p []byte) (int, error) {
    return rw.reader.read(p)
}

Die Anwendung ist wie folgt:

rw := &BufferedReadWriteCloser{bufio.NewReader(i), i}
p, err := rw.Peek(1)
Der Wert von

rw erfüllt die Schnittstelle io.readwritecloser.

Erfordert oder setzt nicht voraus, dass io.readwritecloser über eine Suchmethode verfügt.

Das obige ist der detaillierte Inhalt vonKonvertieren von „bufio.Reader“ in „io.ReadWriteCloser“.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen