空检查在斯卡拉while循环,不寻常的行为
问题描述:
我使用的形式空检查在斯卡拉while循环,不寻常的行为
while((str = br.readLine()) != null){
sb.append(str)
}
聚合使用BufferedReader
的InputStream
的内容,但这个迅速引起了OutOfMemoryError
作为空检查失败拿起空我StringBuffer
规模不断增加......
我已经验证str
确实有null
的值,也验证了它不是"null"
。
重构我的代码
str = br.readLine()
while(str != null){
sb.append(str)
str = br.readLine()
}
的作品,但我不知道如何做到这一点是任何不同。有任何想法吗?
答
在scala中,表达式str = br.readline()
的产出返回值类型Unit
,它总是不等于null。它应该给你一个关于比较Unit
为空的警告。
你是正确的重构它。
P.S.正如@Jesper正确评论你的问题,这不是你通常在scala中读取文件的方式。所以,如果你这样做 - 请使用他的代码示例。如果您有任何其他InputStream
,您可以使用Source.fromInputStream
答
Archeg解释它精美那么试试这个:
var str = ""
while({str = br.readLine; str != null}) {
}
因为你在斯卡拉工作,请尝试使用
scala.io.Source.fromInputStream(is).getLines().mkString("\n")
或
val bufferedReader = new BufferedReader(inputStreamReader)
Iterator continually bufferedReader.readLine takeWhile (_ != null) mkString
还有更多类似Scala的方式来读取文件的内容,例如: 'val sb = new StringBuilder; Source.fromFile(myFile).addString(sb)' – Jesper
@Jesper这里的问题是,我正在使用Java库:)我会记住你的建议。 –