Scalaマニアじゃないので、ほどほどのところを……
//import scala.collection.mutable.ArrayBuffer
object Base32 {
private val BASE32_CHAR: Array[Byte] = Array(
-1,-1,26,27,28,29,30,31,-1,-1,-1,-1,-1,32,-1,-1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1
)
private val BASE32_RSHIFT: Array[Int] = Array( -1, 2, -1, 4, 1, -1, 3, 0)
def decode(data: Array[Byte]): Array[Byte]={
// var result: ArrayBuffer[Byte] = new ArrayBuffer[Byte](((data.length +7)>>3)*5)
var result: Array[Byte] = new Array[Byte](((data.length +7)>>3)*5)
var index: Int = 0
var loop: Int = 0
var v: Int = 0
data.foreach(
_ match{
case '='=>
case d =>
v=v <<5
BASE32_CHAR(d - 0x30) match {
case -1 =>
throw new ArrayIndexOutOfBoundsException
case e=> e
v |= e
BASE32_RSHIFT(loop & 7) match {
case -1 =>
case shift =>
// result += ((v >> shift)&0xFF).asInstanceOf[Byte]
result(index) = ((v >> shift)&0xFF).asInstanceOf[Byte]
index += 1
}
loop += 1
}
}
)
// return result.toArray[Byte]
return result.slice(0, index)
}
}
うーん、こんなもんかな?
コメントアウトされているところを復活させて、かぶっている部分をコメントアウトすれば、ArrayBuffer版になります。
こちらは、ArrayBufferの"+="を使いたかっただけでw
変な文字を食わせたら、ArrayIndexOutOfBoundsExceptionが飛びます。
使いたい方がいらっしゃるなら、OwnRiskでご自由に。
不具合があるようでしたら、コメントにお願いします。