我使用BinaryWriter
将字符串写入文件。出于无关的原因,我需要计算这需要多少字节,但我看到的结果与文档不匹配。
使用此测试代码:
using (var stream = new FileStream(filePath, FileMode.Create)) {
using (var writer = new BinaryWriter(stream)) {
writer.Write("Test");
}
}
我希望文件是8个字节:
Encoding.UTF8.GetByteCount(str)
(UTF-8是BinaryWriter使用的默认值),它报告字符串Test
为4个字节。但是,写入的文件只有5个字节,当我假设字符串总是Encoding.UTF8.GetByteCount(str) + 1
个字节时,我的所有文件偏移量数学都有效。
我不清楚区别在哪里。
这是在Unity 5.6中测试的,它使用Mono / .NET 2.0和一些Mono / .NET 3.5。
答案 0 :(得分:1)
我很惊讶文档说它写的大小未压缩。这是非常浪费的,我希望BinaryWriter.Write7BitEncodedInt提供长度压缩格式,对于127以下的整数,确实需要1个字节。
Reference code确认了期望:
public unsafe virtual void Write(String value)
{
...
int len = _encoding.GetByteCount(value);
Write7BitEncodedInt(len);