Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tukar daripada `bufio.Reader` kepada `io.ReadWriteCloser`

Tukar daripada `bufio.Reader` kepada `io.ReadWriteCloser`

王林
王林ke hadapan
2024-02-05 22:48:07889semak imbas

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

Isi soalan

Saya ada satu io.readwritecloser dan saya ingin mengintipnya tanpa memajukan pembaca,

Jadi saya menggunakan

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

Setakat ini begitu bagus, tetapi apabila saya mahu menggunakan semula yang asal io.readwritecloser (i) 时,它只有 eof (i) ia hanya mempunyai eof.

Jadi soalan saya ialah bagaimana untuk menukar daripada bufio.reader kembali kepada bufio.reader 转换回 io.readwritecloser


Jawapan betul


Memandangkan bufio.reader menimbal data daripada pembaca asas, aplikasi mesti melakukan ini selepas memanggil peek Baca data daripada bufio.reader.

Untuk mendapatkan io.readwritecloser yang melakukan ini, bungkus bufio.reader dan io.readwritecloser asal:

// 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)
}

Cara penggunaan adalah seperti berikut:

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

rw memenuhi antara muka io.readwritecloser.

Tidak memerlukan atau menganggap bahawa io.readwritecloser mempunyai kaedah cari.

Atas ialah kandungan terperinci Tukar daripada `bufio.Reader` kepada `io.ReadWriteCloser`. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam