Streams and File I/O  Various places in the cairo API deal with
reading and writing data, whether from and to files, or to other
sources and destinations. In these cases, what is typically
provided in the C API is a simple version that just takes a
filename, and a complex version that takes a callback function.
An example is the PNG handling functions:  cairo_surface_t *
cairo_image_surface_create_from_png (const char *filename);
cairo_surface_t * cairo_image_surface_create_from_png_stream
(cairo_read_func_t read_func,
void             *closure);  cairo_surface_write_to_png
(cairo_surface_t     *surface,                             const
char          *filename);  cairo_surface_write_to_png_stream
(cairo_surface_t      *surface,
cairo_write_func_t   write_func,
void                 *closure);  The expectation is that the
filename version will be mapped literally in the language
binding, but the callback version will be mapped to a version
that takes a language stream object. For example, in Java, the
four functions above might be mapped t