Arrays 在Scala中将布尔数组转换为字节的最快方法是什么?

Arrays 在Scala中将布尔数组转换为字节的最快方法是什么?,arrays,scala,optimization,binary,Arrays,Scala,Optimization,Binary,在Scala中实现了huffman算法之后,我现在剩下一个长度超过10.000的位数组。现在,我想将这个数组转换为字节,并以最快的方式将其写入文件 我目前有以下算法: val bits = encode(createCodeTree(fileChars))(fileChars) val string = new StringBuilder for(List(b1,b2,b3,b4,b5,b6,b7,b8) <- bits.grouped(8)) string.append(bitsToBy

在Scala中实现了huffman算法之后,我现在剩下一个长度超过10.000的位数组。现在,我想将这个数组转换为字节,并以最快的方式将其写入文件

我目前有以下算法:

val bits = encode(createCodeTree(fileChars))(fileChars)
val string = new StringBuilder
for(List(b1,b2,b3,b4,b5,b6,b7,b8) <- bits.grouped(8)) string.append(bitsToByte(b1,b2,b3,b4,b5,b6,b7,b8))

 def bitsToByte(bits : Boolean*) : Char = {
    var amount = 0;
    for(i <- 1 until bits.length){
      amount += (if(bits(i-1)) 1 else 0) * scala.math.pow(2,i).intValue()
    }
    amount.toChar
  }
val bits=encode(createCodeTree(fileChars))(fileChars)
val string=新的StringBuilder

对于(列表(b1、b2、b3、b4、b5、b6、b7、b8)我不知道这是否快得多,但它肯定更简洁

bits.grouped(8)
    .map(_.foldLeft(0)((i,b) => (i<<1) + (if(b) 1 else 0)).toChar)
    .mkString
位。分组(8)
.map(uu.foldLeft(0)((i,b)=>(ichar翻译更为正确


这假设位是从左到右的从高到低的有效位。如果不是这样,那么将
折叠从
.foldLeft(0)((i,b)=>…
更改为
我不知道这是否快得多,但它肯定更简洁

bits.grouped(8)
    .map(_.foldLeft(0)((i,b) => (i<<1) + (if(b) 1 else 0)).toChar)
    .mkString
位。分组(8)
.map(uu.foldLeft(0)((i,b)=>(ichar翻译更为正确


这假设位是从左到右的从高到低的有效位。如果不是这种情况,则将
折叠
.foldLeft(0)((i,b)=>…
更改为
.foldRight(0)((b,i)=>…

我使用之前的算法完全错误地转换了一些位。谢谢!我使用之前的算法完全错误地转换了一些位。谢谢!