Yesterday I blogged about a bug I was having while implementing a serializer for my append only file storage. I blogged about it here.
The problem with the code is found by gaining a better understanding of how the += operator works:
x += y;
Is equivalent to writing
x = x + y;
The problem in this case can is explained in the following snippet:
public void SkipObject(Stream stream) | |
{ | |
var reader = new BinaryReader(stream); | |
// The problem here is that we first get the current position | |
// from the stream, then we read our int (moving the stream | |
// forward 4 bytes), then sum the position and the int, but the | |
// position value we read initially is now out of date so we wind | |
// up being 4 bytes away from where we expected. | |
stream.Position = stream.Position + reader.ReadInt32(); | |
} |
The fixed version of the function can be seen here:
public void SkipObject(Stream stream) | |
{ | |
var reader = new BinaryReader(stream); | |
var objectSize = reader.ReadInt32(); | |
stream.Position += objectSize; | |
} |