The problem is: you are assuming, that others do that the same way. For the FormsNomalizedData this would be the best way to implement it, because you just copy the stream buffers.
For the V3 Content Normalized Data there is not just reading. Some values are skipped. Others are transformed (MBSC to wide char) and you always speak of records. How someone treats those records must be left to the one implementing the algorithm. In my case, I read the whole project structure when opening the office file. I need to do that, because my users can read, manipulate, sign code. So I do not want to parse or read streams, do compressing/decompressing of code more than one time. Doing it several times would be ineficcient. When you document everything in a pseudo code, which creates a buffer, you should not assume that there is a "next anything". The better way would be in this case: If the ReferenceControl contains a NameRecordExtended record (section 184.108.40.206.2.2) Write ReferenceName.Id, ReferenceName.SizeOfName, ...
Then there would be a consistency in your algorithm.