Mau*_*res 18 java integration scala inputstream outputstream
我正在尝试使用Scala中的基本Java代码从文件中读取并写入OutputStream,但是当我在Scala中使用通常的while(!= -1)时,会给出一个警告"比较Unit和Int的类型! =总是会产生真实的".
代码如下:
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()
Run Code Online (Sandbox Code Playgroud)
我应该如何从输入流写入Scala中的输出流?
我最感兴趣的是类似Scala的解决方案.
Dan*_*ral 41
你可以这样做:
Iterator
.continually (input.read)
.takeWhile (-1 !=)
.foreach (output.write)
Run Code Online (Sandbox Code Playgroud)
Yar*_*lav 17
如果这很慢:
Iterator
.continually (input.read)
.takeWhile (-1 !=)
.foreach (output.write)
Run Code Online (Sandbox Code Playgroud)
你可以扩展它:
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()
Run Code Online (Sandbox Code Playgroud)
赋值语句总是在Scala中read = input.read返回Unit,因此返回Unit,它永远不等于-1.你可以这样做:
while ({read = input.read; read != -1}) {
output.write(read)
}
Run Code Online (Sandbox Code Playgroud)
def stream(inputStream: InputStream, outputStream: OutputStream) =
{
val buffer = new Array[Byte](16384)
def doStream(total: Int = 0): Int = {
val n = inputStream.read(buffer)
if (n == -1)
total
else {
outputStream.write(buffer, 0, n)
doStream(total + n)
}
}
doStream()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13596 次 |
| 最近记录: |