Golang 中的 IO 包詳解:指定讀寫對象和偏移量接口
io.ReaderFrom
type ReaderFrom interface {
ReadFrom(r Reader) (n int64, err error)
}
接口中定義了一個 ReadFrom 方法,常見用法是將實現(xiàn)了該接口的對象(比如文件或網(wǎng)絡(luò)連接)的數(shù)據(jù)讀取到一個實現(xiàn)了 io.Writer 接口的對象。
一些標(biāo)準(zhǔn)庫中的文件類型,在實現(xiàn)了 io.ReadFrom 接口后,可以通過 io.Copy 函數(shù)方便的將數(shù)據(jù)從源文件拷貝到目的文件。
具體使用方法可參考標(biāo)準(zhǔn)庫中實現(xiàn)該接口的類型,例如在 os.File 類型中:
func (f *File) ReadFrom(r io.Reader) (n int64, err error)
io.WriterTo
type WriterTo interface {
WriteTo(w Writer) (n int64, err error)
}
接口中定義了一個 WriteTo 方法,常用于將實現(xiàn)了該接口的對象(比如字節(jié)數(shù)組或文件)的數(shù)據(jù)寫入到一個實現(xiàn)了io.Reader接口的對象中。
一些標(biāo)準(zhǔn)庫中的文件類型,在實現(xiàn)了 io.WriterTo 接口后,可以通過 io.Copy 函數(shù)方便的將數(shù)據(jù)從源文件拷貝到目的文件。
具體使用方法可參考標(biāo)準(zhǔn)庫中實現(xiàn)該接口的類型,例如在 bytes.Buffer 類型中:
func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)
io.ReaderAt
type ReaderAt interface {
ReadAt(p []byte, off int64) (n int, err error)
}
接口中定義了一個 ReadAt 方法,常用于從實現(xiàn)了該接口的對象(比如文件或網(wǎng)絡(luò)連接)中讀取指定位置的數(shù)據(jù)。
ReadAt 方法允許從指定偏移量位置開始讀取數(shù)據(jù),并將讀取的數(shù)據(jù)存入指定的緩沖區(qū)中,并返回實際讀取的字節(jié)數(shù)。使用該接口可實現(xiàn)高效的隨機(jī)讀取操作。
具體使用方法可參考標(biāo)準(zhǔn)庫中實現(xiàn)該接口的類型,例如在 os.File 類型中:
func (f *File) ReadAt(b []byte, off int64) (n int, err error)
當(dāng)在 os.File 中調(diào)用 ReadAt 方法時,file 被視為一個支持隨機(jī)存取的字節(jié)數(shù)組,并可以使用該方法在其中進(jìn)行讀取操作,其中 b 代表讀取的字節(jié)數(shù)組,off 代表字節(jié)偏移量。
io.WriterAt
type WriterAt interface {
WriteAt(p []byte, off int64) (n int, err error)
}
接口中定義了一個 WriteAt 方法,常用于向?qū)崿F(xiàn)了該接口的對象(比如文件或網(wǎng)絡(luò)連接)中指定位置寫入數(shù)據(jù)。
WriteAt 方法允許向指定偏移量位置開始寫入數(shù)據(jù),這個方法可以高效地實現(xiàn)隨機(jī)寫入操作。
具體使用方法可參考標(biāo)準(zhǔn)庫中實現(xiàn)該接口的類型,例如在 os.File 類型中:
func (f *File) WriteAt(b []byte, off int64) (n int, err error)
當(dāng)在 os.File 中調(diào)用 WriteAt 方法時,file 被視為一個支持隨機(jī)存取的字節(jié)數(shù)組,并可以使用該方法在其中進(jìn)行寫入操作,其中 b 代表要寫入的字節(jié)數(shù)組,off 代表字節(jié)偏移量。