У меня есть срез байтов, подобный этому:
mbBytes := 1048576
x := make([]byte, 16 * mbBytes)
Мне известен метод bytes.Trim(s []byte, cutset string)
, который позволяет нам отрезать все начальные и конечные вхождения cutset
, но кажется, что этот метод довольно медленно - для удаления всех нулей из такого среза требуется примерно 80 мс.
Я попробовал альтернативный подход ниже;
func nonZeroLength(b []byte) int {
a := 0
for _, v := range b {
if v != 0 {
a++
}
}
return a
}
Этот метод в 8-10 раз быстрее, чем bytes.Trim()
.
Но когда срез заполнен множеством ненулевых значений - эти методы довольно медленные.
Есть ли более быстрый алгоритм или встроенные методы для удаления нулей из байтового среза?