首頁 > 後端開發 > Golang > 主體

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

王林
發布: 2024-02-05 22:48:07
轉載
893 人瀏覽過

从 `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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板