我在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”会发生什么?
答案 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