一些代码的分析表明,大约 65% 的时间我都在下面的代码中。
它所做的是使用 Data.Binary.Get monad 遍历一个字节串来寻找终止符。如果检测到 0xff,则检查下一个字节是否为 0x00。如果是,它会丢弃 0x00 并继续。如果它不是 0x00,那么它会丢弃两个字节,并将生成的字节列表转换为字节串并返回。
有什么明显的优化方法吗?我看不到它。
parseECS = f [] False
where
f acc ff = do
b <- getWord8
if ff
then if b == 0x00
then f (0xff:acc) False
else return $ L.pack (reverse acc)
else if b == 0xff
then f acc True
else f (b:acc) False