私はScalaでPythonチャレンジシリーズを行うことで少し自分を罰しています。
ここでの課題の1つは、bzipアルゴリズムを使用して圧縮された文字列を読み取り、結果を出力することです。
BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084
少し掘り下げてみると、bzip処理用の標準のJavaライブラリがないように見えますが、apache antプロジェクトには、この男が別のライブラリとして使用するために親切に取り出したものがあります。
問題は、次のコードで動作させることができないようです。それはscala REPLでハングし、JVMは100%のCPU使用率で最大になります。
これは私が試しているコードです...
import java.io.{ByteArrayInputStream}
import org.apache.tools.bzip2.{CBZip2InputStream}
import org.apache.commons.io.{IOUtils}
object ChallengeEight extends Application {
val inputString = """BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084"""
val inputStream = new ByteArrayInputStream( inputString.getBytes("UTF-8") ) //convert string to inputstream
inputStream.skip(2) //skip the 'BZ' part at the start
val bzipInputStream = new CBZip2InputStream(inputStream) //hangs here....
val result = IOUtils.toString(bzipInputStream, "UTF-8");
println(result)
}
誰かアイデアがありますか?または、CBZip2InputStream
クラスは、zip形式で圧縮されたファイルに含まれる可能性のある余分なバイトを予期していますbzip2
か?
どんな助けでもいただければ幸いです
編集記録のために、これはPythonソリューションです
import bz2
un = "BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!" \
"\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084"
print [bz2.decompress(elt) for elt in (un)]