0
我正在嘗試創建一個os.File
的模擬或更具體的io.Reader
。我想模擬讀取128位具體數據而無需實際讀取。將uint32的數組寫入一個字節片段並將其獲取回
只有一個uint32
沒有問題。
模擬:
func (f *FileMock) Read(buf []byte) (n int, err error) {
binary.BigEndian.PutUint32(buf, uint32(2052))
return len(buf), nil
}
測試方法(簡化):
b := make([]byte, 128)
meta_data := make([]uint32, 4)
_, err = s.Read(b)
if err != nil {
// Handle error
}
binary.Read(bytes.NewBuffer(b), binary.BigEndian, &meta_data)
log.Print(meta_data) // Output [2052 0 0 0]
但是,當我需要模擬一個uint32
片PutUint32
的閱讀,因爲它從開始寫到片是沒有幫助的(以前寫過數據)。我嘗試了一堆bytes
和binary
工具的組合,但每次我都無法從字節獲取數據時就沒有運氣。還有就是我的最後一次嘗試(但不是唯一的):
func (f *FileMock) Read(b []byte) (n int, err error) {
buf := bytes.NewBuffer(make([]byte, len(b)))
err = binary.Write(buf, binary.BigEndian, [4]uint32{2051, 123, 28, 28})
buf.Read(b)
return len(b), nil
}
隨着描述上面,我得到一個空片[0, 0, 0, 0]
相同的測試方法。 請注意,這是一個模擬os.File.Read
方法,所以我不能創建一個新的字節片而不是它,我需要將我的數據寫入現有的片。
起初我想知道如何解決這個問題。另外我想知道爲什麼只有[0, 0, 0, 0]
?
感謝您的解答!
切片共享一個基礎數組,你試圖寫入BUF [2:], buf [4:]等? –
@FranckJeannin,我嘗試了很多東西......我會馬上嘗試。 –
@FranckJeannin,你說得對!我發現我的錯誤。我認爲我應該傳遞有關位而不是字節的索引,所以'buf [32:]'不是'buf [4:]'。謝謝!請把你的評論作爲答案我會接受它;) –