来自本网站的文章: How to read pdf file and write it to outputStream
有一个循环:
while ((c = is.read(buf, 0, buf.length)) > 0) {
os.write(buf, 0, c);
os.flush();
}
有人可以帮我理解while语句在这里的工作原理吗?通常我会理解如何
(x < 10) {
x ++;
......
}
但是,(c = is.read(buf, 0, buf.length)
的结果怎么能大于0?
另外,有没有办法调试循环以查看每个步骤中c的值是什么?
答案 0 :(得分:1)
while ((c = is.read(buf, 0, buf.length)) > 0) {
按顺序执行
首先分配:c = is.read(buf, 0, buf.length)
比较第二:c > 0
答案 1 :(得分:1)
作为Java Language Specification州
在运行时,赋值表达式的结果是值 分配发生后的变量。一个结果 赋值表达式本身不是变量。
所以像
这样的赋值表达式c = is.read(buf, 0, buf.length)
无论它出现在(有效)代码中的哪个位置,都有一个值,然后可以将其与<
进行比较。
另外,有没有办法调试循环以查看每个步骤中c的值是什么?
在循环中添加日志语句或在循环内的某处放置断点并检查变量表。
答案 2 :(得分:0)
它依赖于赋值的副作用是赋值,它是一种常见的惯用写作方式
int c = is.read(buf, 0, buf.length);
while (c > 0) {
os.write(buf, 0, c);
os.flush();
c = is.read(buf, 0, buf.length)
}
此外,为了提高性能,您可能不希望在每次循环评估时调用os.flush()
while ((c = is.read(buf, 0, buf.length)) > 0) {
os.write(buf, 0, c);
}
os.flush();