首頁  >  文章  >  後端開發  >  從 `bufio.Reader` 轉換為 `io.ReadWriteCloser`

從 `bufio.Reader` 轉換為 `io.ReadWriteCloser`

王林
王林轉載
2024-02-05 22:48:07892瀏覽

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

問題內容

我有一個io.readwritecloser ,我想在不推進讀者的情況下窺視它,

所以我正在使用

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

到目前為止一切順利,但後來當我想重用原始的 io.readwritecloser (i) 時,它只有 eof

所以我的問題是如何從bufio.reader 轉換回io.readwritecloser


##正確答案


#######################################由於bufio.reader 緩衝來自底層讀取器的數據,因此應用程式必須在呼叫peek 後從bufio.reader 讀取資料。 ### ###要取得執行此操作的 io.readwritecloser,請包裝 bufio.reader 和原始 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)
}
###使用方法如下:###
rw := &BufferedReadWriteCloser{bufio.NewReader(i), i}
p, err := rw.Peek(1)
######rw###的值滿足io.readwritecloser介面。 ### ###不要求或假設 io.readwritecloser 有 seek 方法。 ###

以上是從 `bufio.Reader` 轉換為 `io.ReadWriteCloser`的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除