Method _Stdio.Buffer()->create()

Method create

_Stdio.Buffer _Stdio.Buffer(int|void len)
_Stdio.Buffer _Stdio.Buffer(string(8bit) contents)
_Stdio.Buffer _Stdio.Buffer(System.Memory|String.Buffer contents)


If passed an integer or no argument, create a buffer of that size, or if no argument is given, 226 bytes.

If contents are specified a new buffer with the contents of the given string/System.Memory or String.Buffer will be created.


In the String.Buffer case the data has to be copied unless there is only one reference to the String.Buffer object, since modifications of the String.Buffer would cause the Buffer to point into invalid memory.

In all other cases this will not copy the string data, instead data will be read from the source until it needs to be modified, so the buffer creation is fast regardless of the length of the string.

However, as an example, if the buffer is created with a 100Gb System.Memory mmap:ed file as the contents and you later on try to modify the buffer using one of the add functions (or sprintf and similar) the old contents will be copied.

You can use read_only() to avoid accidents.