我有这个对象: Dictionary<byte, BitArray>()
它充满了来自霍夫曼树的价值观.要将流的每个字节编码为霍夫曼二进制值,我执行以下操作:
// Bytes are the bytes to be encoded, encoded is the output string
foreach (byte c in Bytes)
{
encoded += _translationTable[c].ToBitsString();
}
Run Code Online (Sandbox Code Playgroud)
这是扩展方法:
//Converts the bitarray in a binary string
public static string ToBitsString(this BitArray bitArr)
{
string retStr = string.Empty;
foreach (bool bit in bitArr)
{
retStr += (bit) ? "1" : "0";
}
return retStr;
}
Run Code Online (Sandbox Code Playgroud)
编码64kb数据需要将近3秒钟,有没有办法以更快的方式实现这一结果?
听起来你在循环中执行字符串连接.这是构建新字符串的一种非常低效的方法.我怀疑你想要:
var builder = new StringBuilder();
foreach (byte c in Bytes)
{
builder.Append(_translationTable[c].ToBitsString());
}
var encoded = builder.ToString();
Run Code Online (Sandbox Code Playgroud)
现在我们可以看到ToBitsString它的作用,很容易重写它以接受StringBuilder附加到:
public static void AppendBitsTo(this BitArray bitArray, StringBuilder builder)
{
foreach (bool bit in bitArray)
{
builder.Append(bit ? "1" : "0");
}
}
Run Code Online (Sandbox Code Playgroud)
那么循环的主体将是:
_translationTable[c].AppendBitsTo(builder);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |