Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you initialize an empty bytes.Buffer of size N in Go?

Tags:

go

What is the easiest method to create an empty buffer of size n in Go using bytes.NewBuffer()?

like image 221
cmcginty Avatar asked Jan 19 '18 06:01

cmcginty


People also ask

How do you create a buffer in Golang?

To use the buffer in the go language, we need to import the bytes package of the go language. Once we have imported the bytes package, we can create a variable with the byte package like var x =bytes. Buffer, and on the variable x, we can perform all the operations related to the buffering of string.

What is empty byte in Golang?

The byte value of 0 is is known as a "null byte". It normally never occurs in regular text, but often occurs in binary data (e.g. images, compressed files, etc.)

What is an empty byte?

In general Java terminology, an empty byte array is a byte array with length zero, and can be created with the Java expression new byte[0] .

How do you initialize a byte variable in Python?

bytes() takes three optional parameters: source (Optional) - source to initialize the array of bytes. encoding (Optional) - if the source is a string, the encoding of the string. errors (Optional) - if the source is a string, the action to take when the encoding conversion fails (Read more: String encoding)


1 Answers

Adding some additional info here. The quick way to create a new buffer is briefly mentioned at the end of the doc string:

b := new(bytes.Buffer)

or

b := &bytes.Buffer{}

The Buffer struct define includes a 64 byte internal bootstrap field that is initially used for small allocations. Once the default size is exceeded, a byte slice Buffer.buf is created and internally maintained.

As @leafbebop suggested we can pre-initalize the buf field of the Buffer struct using a new slice.

b := bytes.NewBuffer(make([]byte,0,N))

I also found another option to use the Grow() method:

b := new(bytes.Buffer)
b.Grow(n)

Also it's interesting to point out that the internal buf slice will grow at a rate of cap(buf)*2 + n. This means that if you've written 1MB into a buffer and then add 1 byte, your cap() will increase to 2097153 bytes.

like image 191
cmcginty Avatar answered Sep 21 '22 16:09

cmcginty