(символ) начиная с которого мне нужно обрезать определнные куски из этого []byte. Есть какой-то хороший способ чтобы всё это в памяти не копилось, а наоборот этот []byte потихоньку уменьшался моими вырезаниями кусков?
https://golang.org/pkg/io/#ReadSeeker ?
м? у меня уже байты лежат в памяти огромным куском. теперь пытаюсь отрезать кусочки от этого огромного блока. чтобы высвобождать память и последующий поиск по этому []byte занимал меньше времени.
Интересная у вас задача) Вы можете выделять новые слайсны нужного размера, и делать copy в них из изначального, после чего ибавиться от ссылки на основной слайс, и надеяться, что GC придет за ним
вот думал без выделения новых слайсов можно как-то. пытаюсь уместиться в свои 16 ГБ памяти и никак не получается нормально)))
как эти данные оказались в памяти?
Забудьте. Под капотом слайса массив -- сплошной блок памяти. Он очистится только полностью. Может и можно каким-то дичайшим хаком это сделать, но кажется, что это из разряда фантастики
А вот это действительно очень хороший вопрос. В первую очередь я бы смотрел в эту сторону
arr, err := func() ([]byte, error) { file, err := os.Open(*fileToRead) if err != nil { panic(err) } defer file.Close() return ioutil.ReadAll(file) }()
Ну так ReadSeeker вам в помощь. Не нужно выгружать в память все
а чего не ReadAt?
Да не важно. Зависит от реализации и того, что нужно человеку)
Обсуждают сегодня