今天我看到一个代码如下的问题:
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);
Run Code Online (Sandbox Code Playgroud)
我知道这段代码效率低但是安全吗?是否有一些字节序列会破坏结果?
代码显然已被破坏; 如果这是一个答案,那么你应该把这个bug提请作者注意.
显然,UTF-8序列可以是多个字节.如果有一个多字节序列从当前缓冲区的末尾开始并在下一个缓冲区的开头重新开始,那么将每个缓冲区转换为字符串将是错误的.
| 归档时间: |
|
| 查看次数: |
496 次 |
| 最近记录: |