首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Scala中将文件读入InputStream,然后将其写入OutputStream?

如何在Scala中将文件读入InputStream,然后将其写入OutputStream?
EN

Stack Overflow用户
提问于 2011-08-03 22:12:24
回答 5查看 16.3K关注 0票数 21

我试图在Scala中使用基本的Java代码来读取文件并写入OutputStream,但是当我在Scala中使用常见的而( != -1 )时,我会给我一个警告:“将单位和整数的类型与!=进行比较将始终得到true”。

代码如下:

    val file = this.cache.get(imageFileEntry).getValue().asInstanceOf[File]
    response.setContentType( "image/%s".format( imageDescription.getFormat() ) )

    val input = new BufferedInputStream( new FileInputStream( file ) )
    val output = response.getOutputStream()

    var read : Int = -1

    while ( ( read = input.read ) != -1 ) {
        output.write( read )
    }

    input.close()
    output.flush()

在Scala中,我应该如何从输入流写入到输出流?

我最感兴趣的是类似Scala的解决方案。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-03 22:35:11

你可以这样做:

Iterator 
.continually (input.read)
.takeWhile (-1 !=)
.foreach (output.write)
票数 46
EN

Stack Overflow用户

发布于 2013-05-31 07:52:39

如果这很慢:

Iterator 
.continually (input.read)
.takeWhile (-1 !=)
.foreach (output.write)

您可以将其展开:

val bytes = new Array[Byte](1024) //1024 bytes - Buffer size
Iterator
.continually (input.read(bytes))
.takeWhile (-1 !=)
.foreach (read=>output.write(bytes,0,read))
output.close()
票数 18
EN

Stack Overflow用户

发布于 2011-08-03 22:18:53

赋值语句在Scala中总是返回单位,所以read = input.read返回单位,它永远不会等于-1。你可以这样做:

while ({read = input.read; read != -1}) {
  output.write(read)
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6927873

复制
相关文章

相似问题

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