I hope you dont mind, but I think your design is a bit overcomplicated and makes testing more difficult than it needs to be.
In your design there are many layers and every layer needs to know and call the next layer which needs to know and call an even lower layer and so on. Also it looks like you maybe intermingled data formatting/encoding with writing.
You could just have a few completely separate systems where each just gets a memory buffer containing a whole asset and then gives you a memory buffer with the whole encoded/decoded asset. The archive system would just get asset ids and gives you a simple object which just contains start and end index and which file to write to and possibly another+a little data for updating the archive index. The file layer takes the info object with filename, start, end and data buffer and writes or reads it.
That makes testing easier as you dont need mockups and you spare yourself from implementing buffering logic and knowledge about other systems into all layers.