MemoryOutputStream.this

Creates a new gio.MemoryOutputStream

In most cases this is not the function you want. See Memory.outputStreamNewResizable instead.

If data is non-NULL, the stream will use that for its internal storage.

If realloc_fn is non-NULL, it will be used for resizing the internal storage when necessary and the stream will be considered resizable. In that case, the stream will start out being (conceptually) empty. size is used only as a hint for how big data is. Specifically, seeking to the end of a newly-created stream will seek to zero, not size. Seeking past the end of the stream and then writing will introduce a zero-filled gap.

If realloc_fn is NULL then the stream is fixed-sized. Seeking to the end will seek to size exactly. Writing past the end will give an 'out of space' error. Attempting to seek past the end will fail. Unlike the resizable case, seeking to an offset within the stream and writing will preserve the bytes passed in as data before that point and will return them as part of Memory.outputStreamStealData. If you intend to seek you should probably therefore ensure that data is properly initialised.

It is probably only meaningful to provide data and size in the case that you want a fixed-sized stream. Put another way: if realloc_fn is non-NULL then it makes most sense to give data as NULL and size as 0 (allowing gio.MemoryOutputStream to do the initial allocation for itself).

// a stream that can grow
stream = g_memory_output_stream_new (NULL, 0, realloc, free);

// another stream that can grow
stream2 = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);

// a fixed-size stream
data = malloc (200);
stream3 = g_memory_output_stream_new (data, 200, NULL, free);
  1. this(GMemoryOutputStream* gMemoryOutputStream, bool ownedRef)
  2. this(void* data, size_t size, GReallocFunc reallocFunction, GDestroyNotify destroyFunction)
    class MemoryOutputStream
  3. this()

Parameters

data void*

pointer to a chunk of memory to use, or NULL

size size_t

the size of data

reallocFunction GReallocFunc

a function with realloc() semantics (like g_realloc()) to be called when data needs to be grown, or NULL

destroyFunction GDestroyNotify

a function to be called on data when the stream is finalized, or NULL

Return Value

A newly created gio.MemoryOutputStream object.

Throws

ConstructionException GTK+ fails to create the object.