buff := bytes.NewBuffer(somebytes)
Как написать сверху buff
? В настоящее время я создаю новый буфер. Правильно ли это?Можно ли написать поверх буфера?
newBuff := bytes.NewBuffer(otherbytes)
newBuff.ReadFrom(buff)
buff := bytes.NewBuffer(somebytes)
Как написать сверху buff
? В настоящее время я создаю новый буфер. Правильно ли это?Можно ли написать поверх буфера?
newBuff := bytes.NewBuffer(otherbytes)
newBuff.ReadFrom(buff)
bytes.NewBuffer()
возвращает *Buffer
. *Buffer
реализует io.Writer
(и io.Reader
), поэтому вы можете просто написать ему, вызвав его методы Write()
или WriteString()
.
Пример:
somebytes := []byte("abc")
buff := bytes.NewBuffer(somebytes)
buff.Write([]byte("def"))
fmt.Println(buff)
Выход, как и ожидалось (попробуйте на Go Playground):
abcdef
Если вы хотите начать с пустого буфера, вы можете просто создать пустой Buffer
-структуру (и пройдите по его адресу):
buff := &bytes.Buffer{}
Если вы хотите «перезаписать» ток в буфере, вы можете использовать метод Buffer.Reset()
или эквивалентный вызов Buffer.Truncate(0)
.
Обратите внимание, что сброс или усечения буфера будет выбрасывать содержимое (или только часть его в случае Truncate()
. Но выделенный буфер (байты ломтик) в фоновом режиме сохраняются и используется повторно.
Примечания :
То, что вы действительно хотите сделать, невозможно напрямую: просто представьте, хотите ли вы вставить некоторые данные перед существующим контентом, существующее содержимое нужно будет менять каждый раз, когда вы пишете/вставляете что-то впереди Это не очень эффективно.
Вместо этого создайте свое тело в Buffer
. Как только это будет сделано, вы узнаете, каков будет ваш заголовок. Создайте заголовок в другом Buffer
, и когда это будет сделано, скопируйте (напишите) тело (с первого Buffer
) во второй уже содержащий заголовок.
Если вам не нужно хранить все данные, вам не нужно создавать 2 Buffer
для заголовка. Как только тело будет готово, напишите заголовок на ваш выход, а затем напишите тело с Buffer
.
Вопрос в том, как написать «def» поверх «abc». –
Мой вариант использования заключается в том, что я пишу различные данные, а также отслеживаю «зависимости» после каждой записи. После того, как я напишу все части тела, мне нужно написать заголовок со всеми зависимостями на вершине тела (буфера). –
@ Theuserwithnohat Итак, вы хотите вставить заголовок перед телом? Или пространство для заголовка зарезервировано, и вы хотите его заполнить позже (после того, как тело было написано)? – icza
Вы хотите начать с 'somebytes' и добавить (написать) к нему больше байтов? – icza
В моем коде у меня на самом деле есть только «buff»; somebytes - результат самого баффа (buff.Bytes), поэтому я задавался вопросом, могу ли я использовать только один буфер или мне нужно два. –