protected virtual int RawLength() { if (!CanSeek) return -1; int current = RawTell(); if ((current < 0) || !RawSeek(0, SeekOrigin.End)) return -1; int rv = RawTell(); if ((rv < 0) || !RawSeek(current, SeekOrigin.Begin)) return -1; return rv; }