## GMemoryOutputStream GMemoryOutputStream — Streaming output operations on memory chunks |

## Synopsis

    #include <gio/gio.h>

    gpointer            (*GReallocFunc)                     (gpointer data,
                                                             gsize size);
                        GMemoryOutputStream;
    GOutputStream*      g_memory_output_stream_new          (gpointer data,
                                                             gsize len,
                                                             GReallocFunc realloc_fn,
                                                             GDestroyNotify destroy);
    gpointer            g_memory_output_stream_get_data     (GMemoryOutputStream *ostream);
    gsize               g_memory_output_stream_get_size     (GMemoryOutputStream *ostream);

## Object Hierarchy

      GObject
       +----GOutputStream
             +----GMemoryOutputStream

## Implemented Interfaces

GMemoryOutputStream implements GSeekable.

## Description

GMemoryOutputStream is a class for using arbitrary memory chunks as output for GIO streaming output operations.

## Details

### GReallocFunc ()

    gpointer            (*GReallocFunc)                     (gpointer data,
                                                             gsize size);

Changes the size of the memory block pointed to by `data` to `size` bytes.

The function should have the same semantics as `realloc()`.

`data` : | memory block to reallocate
`size` : | size to reallocate `data` to
Returns : | a pointer to the reallocated memory

### GMemoryOutputStream

    typedef struct _GMemoryOutputStream GMemoryOutputStream;

Implements GOutputStream for arbitrary memory chunks.

### g_memory_output_stream_new ()

    GOutputStream*      g_memory_output_stream_new          (gpointer data,
                                                             gsize len,
                                                             GReallocFunc realloc_fn,
                                                             GDestroyNotify destroy);

Creates a new GMemoryOutputStream.

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. To construct a fixed-size output stream, pass `NULL` as `realloc_fn`.

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

    /* a fixed-size stream */
    data = malloc (200);
    stream2 = g_memory_output_stream_new (data, 200, NULL, free);

`data` : | pointer to a chunk of memory to use, or `NULL`
`len` : | the size of `data`
`realloc_fn` : | a function with `realloc()` semantics to be called when `data` needs to be grown, or `NULL`
`destroy` : | a function to be called on `data` when the stream is finalized, or `NULL`
Returns : | A newly created GMemoryOutputStream object.

### g_memory_output_stream_get_data ()

    gpointer            g_memory_output_stream_get_data     (GMemoryOutputStream *ostream);

Gets any loaded data from the `ostream`.

Note that the returned pointer may become invalid on the next write or truncate operation on the stream.

`ostream` : | a GMemoryOutputStream
Returns : | pointer to the stream's data

### g_memory_output_stream_get_size ()

    gsize               g_memory_output_stream_get_size     (GMemoryOutputStream *ostream);

Gets the size of the loaded data from the `ostream`.

Note that the returned size may become invalid on the next write or truncate operation on the stream.

`ostream` : | a GMemoryOutputStream
Returns : | the size of the stream's data

## See Also

GMemoryInputStream