scala - 如何使用ProcessBuilder返回二进制数据?

标签 scala process

我想使用 scala.sys.process 将图形的 DOT 描述发送到 dot 并检索到二进制图像的转换。

val process = "dot -T" + format
val inputStream = new ByteArrayInputStream(dot.getBytes("UTF-8"))
process #< inputStream !!

这可以正常工作,但是 !! 返回一个 String,而不是 Array[Byte]。如何获得以字节为单位而不是字符串的响应?我认为我不能使用字符串作为中间表示,因为二进制数据不会描述有效的字符串。

最佳答案

如果您确实想避免文件 IO 并且可以访问 Linux(或同等版本)下的 base64 命令行程序,您可以

val process = Seq("bash","-c","dot -T" + format + " | base64")
val inputStream = new ByteArrayInputStream(dot.getBytes("UTF-8"))
javax.xml.bind.DatatypeConverter.parseBase64Binary(process #< inputStream !!)

获取字节数组。

您还可以提供自己的 ProcessIO,它在输入/输出流上使用二进制数据方法,但这需要更多工作。不过,如果 base64 太慢,那可能还是值得的。 (我预计点本身将是瓶颈,但我不确定你要发送什么。)

关于scala - 如何使用ProcessBuilder返回二进制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15975130/

相关文章:

scala - Akka Actor 有多重?

swift - 快速杀死进程

c - 使用 waitpid 选项等待所有子进程 __WALL

java - 读取java进程的输入流

php - Windows 中使用 PHP 的应用程序线程

Python:如何启动完整进程而不是子进程并检索 PID

scala - Spark中的groupByKey是否保留原始顺序?

scala - 如何构建泛型类型的匿名实例?

scala - 如何覆盖具有多个子项目的 SBT 项目中子项目的设置

找不到 Scala : value x when unpacking returned tuple