java - 在 Scala 中处理 BZIP 字符串/文件

标签 java scala bzip2

我通过在 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 项目中有一些东西,that this guy已取出用作单独的库。

问题是,我似乎无法让它与以下代码一起工作,它只是卡在 scala REPL 中,并且 JVM 的 CPU 使用率达到 100%

这是我正在尝试的代码...

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)]

最佳答案

要转义字符,请使用 unicode escape sequence类似于 \uXXXX 语法,其中 XXXX 是 unicode 字符的十六进制序列。

val un = "BZh91AY&SYA\u00af\u0082\r\u0000\u0000\u0001\u0001\u0080\u0002\u00c0\u0002\u0000 \u0000!\u009ah3M\u0007<]\u00c9\u0014\u00e1BA\u0006\u00be\u00084"

关于java - 在 Scala 中处理 BZIP 字符串/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5159602/

相关文章:

java - Java中的正则表达式将找到 `I`的出现,除非 `ARTICLE I`出现

java - 明显的类型冲突,但编译

java - 为什么html源代码中缺少 "qaautomation.net"?

Scala:如何将字符串拆分为映射

c - 帮助在Windows上编译seek-bzip2

java - 在android中运行方法onclick崩溃

java - 在 Play 框架中使用 java 类与 Scala 作为 Json 对象返回

scala - 理解 Scala : passing functions as arguments

Hadoop 无法从 s3 复制输入 bz2 文件

command-line - 7z bzip2 格式命令行错误