首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过scala获取二进制数据流?

如何通过scala获取二进制数据流?
EN

Stack Overflow用户
提问于 2013-04-28 19:59:03
回答 1查看 767关注 0票数 1

我想在scala程序中下载一个给定url的图像。我正在尝试做一些类似以下的事情,但我能找到的所有dispatcher示例都是关于文本的,而不是数据流。谁能给我举几个使用分派从url下载二进制文件的例子?如果我尝试直接使用img,编译器会对Future进行限制。

我正在尝试执行的任务是检索facebook个人资料图像。

代码语言:javascript
复制
  def copyUrl( uri : String ) : Array[Byte] = {
    val svc = url(uri)
    val img = Http(svc OK as.Bytes)
    for ( i <- img )  {
      println(i)
    }
    // something here but no idea
    img.map(_.toArray)
  }

我得到以下编译器错误

代码语言:javascript
复制
ProfileImage.scala:31: type mismatch;
[error]  found   : scala.concurrent.Future[Array[Byte]]
[error]  required: Array[Byte]
[error]           img.map(_.toArray)
[error]                  ^
[error] one error found

我也试过

代码语言:javascript
复制
  def copyUrl( uri : String ) : Array[Byte] = {
    result = scala.io.Source.fromURL(uri).map(_.toByte).toArray
  }

这导致了

代码语言:javascript
复制
Exception being returned to browser when processing /oauth/welcome java.nio.charset.MalformedInputException: Input length = 1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-28 20:03:47

Dispatch将向您返回Array[Byte]Future,因此您需要应用Future才能获得Array[Byte]。尝试更改以下行:

代码语言:javascript
复制
val img = Http(svc OK as.Bytes)()

请注意,我在该行的末尾添加了一个()。这将应用Future,阻塞并等待结果。阻塞并不理想,而且调度Future也支持异步回调,但这对于您的示例来说是可行的,以显示缺失的内容。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16262616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档