我在Java中是一个新手,我试图对文件执行MAC计算。 现在由于文件的大小在运行时不知道,所以我不能将所有文件加载到内存中。所以我编写了代码,以便能够读取位(本例中为4k)。 我遇到的问题是我试图将整个文件加载到内存中,以查看两种方法是否产生相同的散列。但是他们似乎产生不同的散列Java将文件读入内存以及如何不炸掉内存
这里是由位码位:
FileInputStream fis = new FileInputStream("sbs.dat");
byte[] file = new byte[4096];
m = Mac.getInstance("HmacSHA1");
int i=fis.read(file);
m.init(key);
while (i != -1)
{
m.update(file);
i=fis.read(file);
}
mac = m.doFinal();
而这里的一次性办法:
File f = new File("sbs.dat");
long size = f.length();
byte[] file = new byte[(int) size];
fis.read(file);
m = Mac.getInstance("HmacSHA1");
m.init(key);
m.update(file);
mac = m.doFinal();
难道他们不应该都产生相同的散列?
然而,这个问题是更通用的。第一代码是将文件加载到内存中的正确方式,并在while循环中执行任何我们想要执行的操作? (套接字发送,密码文件等)。 这个问题很有用,因为我看过的每个教程都只是一次加载所有内容...
更新:工作:-D。此方法是否可以正确地通过套接字发送文件?
卫生署。我觉得自己像一个白痴,我完全忘记了在Mac课程中有3种更新方法。然而,我仍然会在一些简单的事情上浪费时间。要尝试一下,但听起来不错。 – ptguy 2011-04-15 20:07:16