我正在使用表格
使用InputStream
汇总BufferedReader
的内容
while( (str = br.readLine()) != null){
sb.append(str)
}
但是这很快导致了OutOfMemoryError
,因为空检查无法获取空值并且StringBuffer
的大小不断增加......
我已经确认str
的值为null
,并且已验证它不是"null"
。
将我的代码重构为
str = br.readLine()
while(str != null){
sb.append(str)
str = br.readLine()
}
有效,但我不知道这会有什么不同。有什么想法吗?
答案 0 :(得分:3)
在scala中,表达式str = br.readline()
产生类型Unit
的返回值,它始终不等于null。它本应该给你一个关于将Unit
与null进行比较的警告。
你这样重构是正确的。
P.S。正如@Jesper正确评论了您的问题,这不是您通常在scala中读取文件的方式。所以,如果你这样做 - 请使用他的代码示例。如果您有其他InputStream
,则可以使用Source.fromInputStream
答案 1 :(得分:0)
Archeg已经解释得很漂亮所以试试这个:
var str = ""
while({str = br.readLine; str != null}) {
}
由于您使用的是Scala,请尝试使用
scala.io.Source.fromInputStream(is).getLines().mkString("\n")
或
val bufferedReader = new BufferedReader(inputStreamReader)
Iterator continually bufferedReader.readLine takeWhile (_ != null) mkString