首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scalaj-http - 'execute‘方法返回“流已关闭”

scalaj-http - 'execute‘方法返回“流已关闭”
EN

Stack Overflow用户
提问于 2020-09-15 20:37:47
回答 1查看 71关注 0票数 0

我想使用scalaj-http库从http连接下载一个31 to大小的字节内容文件。'asBytes‘不是一个选项,因为它返回一个字节数组。

我试图使用' execute‘方法返回输入流,但当我执行下面的程序时,它返回流已关闭。我不认为我读了两次流。

我做错了什么?

代码语言:javascript
复制
  val response: HttpResponse[InputStream] = Http(url).postForm(parameters).execute(inputStream => inputStream)

  if (response.isError) println(s"Sorry, error found: ${response.code}")
  else {
    val is: InputStream = response.body
    val buffer: Array[Byte] = Array.ofDim[Byte](1024)
    val fos = new FileOutputStream("xxx")
    var read: Int = 0

    while (read >= 0) {
      read = is.read(buffer)
      if (read > 0) {
        fos.write(buffer, 0, read)
      }
    }
    fos.close()
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-10 00:37:29

不能导出inputStream,因为流将在execute方法结束时关闭。您应该在execute中使用流,如下所示:

代码语言:javascript
复制
  val response = Http(url).postForm(parameters).execute { is =>         
    val buffer: Array[Byte] = Array.ofDim[Byte](1024)
    val fos = new FileOutputStream("xxx")
    var read: Int = 0

    while (read >= 0) {
      read = is.read(buffer)
      if (read > 0) {
        fos.write(buffer, 0, read)
      }
    }
    fos.close()
  }

  if (response.isError) println(s"Sorry, error found: ${response.code}")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63902012

复制
相关文章

相似问题

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