should the codec go in the options ? 

Then you won't need 4 arguments to a function, it also means people can pass in their own read stream specific codecs (like converting json records into instances of prototypes on read)