为什么他们在从输入流中读取时会使用“while”语句?

时间:2013-09-13 05:45:47

标签: java inputstream

我在android.com上找到了这小段代码:

MessageDigest digester = MessageDigest.getInstance("MD5");
byte[] bytes = new byte[8192];
int byteCount;
while ((byteCount = in.read(bytes)) > 0) {
    digester.update(bytes, 0, byteCount);
}
byte[] digest = digester.digest();

我的问题是:如果我用“if”替换“while”会发生什么?

5 个答案:

答案 0 :(得分:1)

主要是因为Stream的长度通常是未知或不可靠的,因为它们一次只读取流的“块”。

你可以争辩说,“但是我从一个文件中读到了”,但这种方法可以让你灵活地抽象出这个过程,因为你不在乎你在哪里阅读。

答案 1 :(得分:1)

android.com上的示例代码显示了如何从MD5生成InputStream哈希。 你不知道流中有多少字节,对吗? 只要你不知道这一点就必须循环。

现在回答你的问题:

  

我的问题是:如果我用“if”替换“while”会发生什么?

您只能在InputStream上生成提供8192或更少字节的MD5哈希值。

或以其他方式表达:

MD5哈希可能只对InputStream的8192个字节有效。

注意:InputStream只能读取当前可用的字节数。因此,即使InputStream的源包含超过8192个字节,read(byte [8192])也可能只读取10,5甚至没有字节。

另见U Mad的评论。

答案 2 :(得分:0)

如果你要做这样的替换,会发生的情况是,如果条件成立,大括号内的段只会被执行一次。

在那里继续迭代,以便逐渐填充缓冲区。

这是从流中读取数据的常用方法。

答案 3 :(得分:0)

简单

If --> conditional statement 

(如果条件满足,则仅检查条件并执行一次语句)

while --> looping statement 

(只要满足条件,就会执行语句)

答案 4 :(得分:0)

what would happen if I replace "while" with "if" ?

只是你不能在那里循环并只执行一次。

 while(condition)// this will run while condition is true 

 if(condition)// this will execute if condition is true only there is no looping
相关问题