我想使用 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/