This depends about your requirements. Would you honestly use XML or SQL blobs for high resolution pictures or audio?
I Read again your question: If you have bunch of arbitrary objects you want to store in a file image, the way to get them in/out is the copying and relocation. The out-copy can get help from the GC. The in-copy is really straightforward and mainly depends on the relocation routine.
If there would be a requirement for working with very big files, I'd provide some method into that system to mark objects 'dirty', as well as marking where they actually lie in the file image.
There would be also the need to mark in removed objects, unless if you never remove anything.