Skip to content

Instantly share code, notes, and snippets.

@xigang
Forked from xlab/bytes_split.go
Created July 4, 2020 08:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xigang/0b9b40a6160a7ffa8b60e080b47020d0 to your computer and use it in GitHub Desktop.
Save xigang/0b9b40a6160a7ffa8b60e080b47020d0 to your computer and use it in GitHub Desktop.
Golang split byte slice in chunks sized by limit
func split(buf []byte, lim int) [][]byte {
var chunk []byte
chunks := make([][]byte, 0, len(buf)/lim+1)
for len(buf) >= lim {
chunk, buf = buf[:lim], buf[lim:]
chunks = append(chunks, chunk)
}
if len(buf) > 0 {
chunks = append(chunks, buf[:len(buf)])
}
return chunks
}
const PackSizeLimit = 5 * 1024 * 1024
// [a b c] -> [[a, b], [c]]
// where (len(a)+len(b) < MAX) and (len(c) < MAX),
// where (len(a) < MAX) and (len(b) < MAX) and (len(c) < MAX),
// but (len(a) + len(b) + len(c)) > MAX
func splitForJoin(chunks [][]byte, lim int) [][][]byte {
var result [][][]byte
for len(chunks) > 0 {
for i, v := range chunks {
if size+len(v) > PackSizeLimit {
chunks = chunks[i:]
break
}
}
// TODO
}
return result
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment