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

하지만이 uint32 슬라이스 PutUint32의 읽기를 조롱 할 때 처음부터 조각에 기록하기 때문에 도움이되지 않습니다 (이전에 기록 된 데이터를 겹쳐 씁니다). bytesbinary 도구의 조합을 시도했지만 바이트에서 데이터를 다시 가져올 수 없을 때마다 운이 없었습니다. 나는 빈 슬라이스 [0, 0, 0, 0]을 획득하고있어 상기와 동일한 시험 방법으로

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 
} 

: 내 마지막 시도는 (그렇지 않은 유일한입니다)가있다. 참고 : 이것은 os.File.Read 메서드의 모의이므로 기존 슬라이스에 내 데이터를 쓰는 대신 새로운 바이트 슬라이스를 만들 수 없습니다.

처음에는 문제를 해결하는 방법이 궁금합니다. 또한 왜 그냥 [0, 0, 0, 0]이 있는지 알고 싶습니까?

답변에 감사드립니다!

+0

슬라이스하면 BUF에 쓰기 시도하는 기본 배열을 공유 [2] buf [4 :] 등? –

+0

@FranckJeannin, 나는 많은 것을 시도했다 ... 나는 지금 그것을 시도 할 것이다. –

+0

@FranckJeannin, 네 말이 맞아! 나는 내 실수를 발견했다. 나는 바이트가 아닌 비트에 관한 인덱스를 전달해야한다고 생각했기 때문에'buf [32 :]'는'buf [4 :] '가 아니었다. 고맙습니다! 답변으로 의견을 말하십시오. 동의하겠습니다.) –

답변

0

슬라이스 기초 어레이를 공유하면 BUF로 (PutUint32) 쓸 수 [4], [8] BUF 등