Scala中循环时空检入,异常行为
我正在使用Scala中循环时空检入,异常行为,scala,while-loop,Scala,While Loop,我正在使用BufferedReader使用表单聚合InputStream的内容 while( (str = br.readLine()) != null){ sb.append(str) } 但这很快导致了一个OutOfMemoryError,因为空检查无法提取空值,并且我的StringBuffer的大小不断增加 我已经验证了str的值是否为null,并且还验证了它不是“null” 将代码重构为 str = br.readLine() while(str != null){ sb.ap
BufferedReader
使用表单聚合InputStream
的内容
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()
}
工作,但我不知道这会有什么不同。有什么想法吗?在scala中,表达式
str=br.readline()
产生类型为Unit
的返回值,该值始终不等于null。它应该给您一个关于将Unit
与null进行比较的警告
你这样重构它是正确的
另外,@Jesper正确地评论了您的问题,这不是您通常在scala中读取文件的方式。因此,如果您这样做,请使用他的代码示例。如果您有任何其他
InputStream
,则可以在scala中使用Source.fromInputStream
表达式str=br.readline()
生成类型Unit
的返回值,该值始终不等于null。它应该给您一个关于将Unit
与null进行比较的警告
你这样重构它是正确的
另外,@Jesper正确地评论了您的问题,这不是您通常在scala中读取文件的方式。因此,如果您这样做,请使用他的代码示例。如果您有任何其他的
InputStream
,您可以使用源代码。从InputStream
Archeg已经很好地解释了这一点,请尝试以下方法:
var str = ""
while({str = br.readLine; str != null}) {
}
既然您在Scala中工作,请尝试使用
scala.io.Source.fromInputStream(is).getLines().mkString("\n")
或
Archeg已经很好地解释了这一点,请尝试以下方法:
var str = ""
while({str = br.readLine; str != null}) {
}
既然您在Scala中工作,请尝试使用
scala.io.Source.fromInputStream(is).getLines().mkString("\n")
或
有更多类似于Scala的方式读取文件内容,例如:
val sb=new StringBuilder;Source.fromFile(myFile).addString(sb)
@Jesper这里的问题是我正在使用一个Java库:)我会记住你的建议。有更多类似Scala的方法来读取文件内容,例如:val sb=new StringBuilder;Source.fromFile(myFile).addString(sb)
@Jesper这里的问题是我正在使用一个Java库:)我会记住你的建议。