New Issue: Design for IO in Apache Arrow

18130, "ShreyasKhandekar", "Design for IO in Apache Arrow", "2021-07-27T18:36:20Z"

Parent Issue: #18127

Arrow has a lot of types of streams which we should support.

I am actually unsure what is going on here with the GLib stuff because the way the documentation refers to some of the types makes it seems like it is much more involved that you would expect C to be. There are objects? And interfaces like Readable and Writable which are implemented by the reader and writer classes respectively.

The GArrowReadble interface is implemented by GArrowBufferInputStream, GArrowCUDABufferInputStream, GArrowCompressedInputStream, GArrowGIOInputStream, GArrowInputStream, GArrowMemoryMappedInputStream and GArrowSeekableInputStream.

The GArrowWritable is implemented by GArrowBufferOutputStream, GArrowCUDABufferOutputStream, GArrowCompressedOutputStream, GArrowFileOutputStream, GArrowGIOOutputStream and GArrowOutputStream.
.

There is a hierarchy here which decides which functions can be used on what kind of stream.

There are also some functions whose purpose seems similar but I was only able to get one of those to work for me.

Personally I think that the way it is done is still verbose and stands to benefit from better naming and error message consolidation.