Input and ouput operations should be done on distinct interfaces. As many stream are only used in a read-only or write-only mode. Anyway, some streams are used for both mode, so an interface combining both modes is required.
The fundamental streams should handle only bytes, since lower-level I/O operations are only about bytes. Anyway, there should be higher level interfaces to handle characters and strings. And maybe some other kind of objects.
Some streams provide random access, such as file streams, some specific interfaces should be avaible for those streams.