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
도구의 조합을 시도했지만 바이트에서 데이터를 다시 가져올 수 없을 때마다 운이 없었습니다. 나는 빈 슬라이스 [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]
이 있는지 알고 싶습니까?
답변에 감사드립니다!
슬라이스하면 BUF에 쓰기 시도하는 기본 배열을 공유 [2] buf [4 :] 등? –
@FranckJeannin, 나는 많은 것을 시도했다 ... 나는 지금 그것을 시도 할 것이다. –
@FranckJeannin, 네 말이 맞아! 나는 내 실수를 발견했다. 나는 바이트가 아닌 비트에 관한 인덱스를 전달해야한다고 생각했기 때문에'buf [32 :]'는'buf [4 :] '가 아니었다. 고맙습니다! 답변으로 의견을 말하십시오. 동의하겠습니다.) –