2017-01-24 28 views
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] 

但是,當我需要模擬一個uint32PutUint32的閱讀,因爲它從開始寫到片是沒有幫助的(以前寫過數據)。我嘗試了一堆bytesbinary工具的組合,但每次我都無法從字節獲取數據時就沒有運氣。還有就是我的最後一次嘗試(但不是唯一的):

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]

感謝您的解答!

+0

切片共享一個基礎數組,你試圖寫入BUF [2:], buf [4:]等? –

+0

@FranckJeannin,我嘗試了很多東西......我會馬上嘗試。 –

+0

@FranckJeannin,你說得對!我發現我的錯誤。我認爲我應該傳遞有關位而不是字節的索引,所以'buf [32:]'不是'buf [4:]'。謝謝!請把你的評論作爲答案我會接受它;) –

回答

0

切片共享一個基礎數組,可以編寫(PutUint32)至BUF [4:],BUF [8:]等

相關問題