【发布时间】:2017-07-23 20:20:09
【问题描述】:
今天看到一个问题,代码是这样的:
var accumulator = "";
var buffer = new byte[8192];
while (true)
{
var readed = stream.Read(buffer, 0, buffer.Length);
accumulator += Encoding.UTF8.GetString(buffer, 0, readed);
if (readed < buffer.Length)
break;
}
var result = Encoding.UTF8.GetBytes(accumulator);
我知道这段代码效率低下,但它安全吗?是否有一些字节序列会破坏结果?
【问题讨论】:
-
任何将代码点拆分为 8192 字节边界的操作都会失败,是的。为什么解码为 UTF-8 只是为了立即重新编码?
-
不,这不安全。更好的方法是
accumulator = new StreamReader(stream, Encoding.UTF8).ReadToEnd()