Skip to content

Instantly share code, notes, and snippets.

@satbirdd
Forked from xlab/bytes_split.go
Created October 25, 2017 01:38
Show Gist options
  • Save satbirdd/5f00270d5f093e9fced74993f324c7d0 to your computer and use it in GitHub Desktop.
Save satbirdd/5f00270d5f093e9fced74993f324c7d0 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