我通过在 Scala 中进行 python 挑战系列来惩罚自己。
现在,挑战之一是读取使用 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
该类是否期望您可能在已压缩的文件中找到一些额外的字节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)]