private const int RESULT_LENGTH = 10;
public static unsafe string Encode1(byte[] data)
{
var result = new string('0', RESULT_LENGTH); // memory allocation
fixed (char* c = result)
{
for (int i = 0; i < RESULT_LENGTH; i++)
{
c[i] = DetermineChar(data, i);
}
}
return result;
}
public static string Encode2(byte[] data)
{
var chars = new char[RESULT_LENGTH]; // memory allocation
for (int i = 0; i < RESULT_LENGTH; i++)
{
chars[i] = DetermineChar(data, i);
}
return new string(chars); // again a memory allocation
}
private static char DetermineChar(byte[] data, int index)
{
// dummy algorithm.
return 'a';
}
这两种方法都根据一些特定的算法将字节数组编码为字符串。第一个创建一个字符串并使用指针写入单个字符。第二个创建一个字符数组并最终使用该数组来实例化一个字符串。
我知道字符串是不可变的,并且多个字符串声明可以指向同一个分配的内存。此外,根据本文,除非绝对必要,否则不应使用不安全的字符串修改。
我的问题: 什么时候使用 Encode1 示例代码中使用的“不安全字符串修改”是安全的?
附注。我知道新的概念,如Span 和 Memory,以及string.Create方法。我只是对这个具体案例很好奇。
慕村225694
相关分类