使用 BinaryWriter 计算存储字符串所需的字节数

Calculating bytes needed to store a string using BinaryWriter

我正在使用 BinaryWriter 将字符串写入文件。由于不相关的原因,我需要计算这将需要多少字节,但我看到的结果与文档不匹配。

用这个测试代码:

using (var stream = new FileStream(filePath, FileMode.Create)) {
    using (var writer = new BinaryWriter(stream)) {
        writer.Write("Test");
    }
}

我希望文件是 8 个字节:

但是,写入的文件只有 5 个字节,并且当我假设字符串始终为 Encoding.UTF8.GetByteCount(str) + 1 字节时,我所有的文件偏移数学运算都有效。

我不清楚区别在哪里。

这正在 Unity 5.6 中进行测试,它使用 Mono/.NET 2.0 和一些 Mono/.NET 3.5。

我很惊讶文档说它写入未压缩的大小。这是非常浪费的,我希望 BinaryWriter.Write7BitEncodedInt 提供的长度压缩格式确实需要 1 个字节用于小于 127 的整数。

Reference code 证实了预期:

 public unsafe virtual void Write(String value) 
 {
     ... 
     int len = _encoding.GetByteCount(value);
     Write7BitEncodedInt(len);