英文:
Terminating indicator for binary byte array in Golang?
问题
在Golang中,如果我有一个包含二进制数据的字节数组,当它在一个较大的数组中时,我如何确定实际数据的终止位置?例如,如果我按照以下方式读取一个文件的纯文本内容:
chunk := make([]byte, 1024)
// 从文件中读取一些数据到chunk中,但只有10个字节被填充...
然后,我可以通过以下方式确定实际数据的大小:
n := bytes.IndexByte(chunk, 0)
当数据是纯文本时,n将给出实际数据的末尾位置。如果数据是二进制的,我该如何做到这一点呢?
英文:
In Golang if I have a byte array of binary data how do I determine the termination of actual data if it is in a larger array. For example if I do the following, reading a file when it is plain text:
chunk := make([]byte, 1024)
..read some data into the chunk but only 10 bytes are filled from the file...
I can then determine the actual size of the data by doing the following:
n := bytes.IndexByte(chunk, 0)
When it is plain text n will give me the end of the actual data - how do I do that if the data is binary?
答案1
得分: 3
io.Reader的 Read函数返回读取的字节数。
然后,您可以创建一个相应大小的子切片。
例如:
data := make([]byte,1024)
n, err := reader.Read(arr)
if err != nil {
// 处理错误
} else {
rightSized := data[:n]
// rightSized现在是长度为N的[]byte,并且共享底层的支持数组,因此既节省空间又高效
// 它将包含从reader中读取的内容
}
英文:
io.Reader's Read function returns the number of bytes read.
You can then create a sub-slice of that size.
For example:
data := make([]byte,1024)
n, err := reader.Read(arr)
if err != nil {
// do something with error
} else {
rightSized := data[:n]
// rightSized is []byte of N length now and shares the underlying
// backing array so it's both space and time efficient
// this will contain whatever was read from the reader
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论