public uint GetStringOffset(string value)
{
if (string.IsNullOrEmpty(value))
return 0;
if (!_hasReadAllStrings)
ReadAllStrings();
if (_readStrings.ContainsValue(value))
return _readStrings.First(rs => rs.Value == value).Key;
uint offset = (uint)_mainStream.Length;
_mainStream.Seek(offset, SeekOrigin.Begin);
_binWriter.Write(Encoding.UTF8.GetBytes(value)); // data
_binWriter.Write((byte)0); // terminator
_readStrings.Add(offset, value);
_streamHeader.Size = (uint)_mainStream.Length;
return offset;
}