Byte的文件比较

时间:2012-12-19 09:43:33

标签: android file compare byte

我想逐字节地比较两个相同大小的文件以获得重复。

我正在使用此代码进行比较,但它不起作用:

boolean match=true;                    
BufferedInputStream fs1;
                    BufferedInputStream fs2;
                    byte[] f1 = new byte[(int)f1size],f2=new byte[(int)f2size];
                    try {
                        fs1 = new BufferedInputStream(new FileInputStream(file1));
                        fs2 = new BufferedInputStream(new FileInputStream(file2));
                        fs1.read(f1, 0, f1.length);
                        fs2.read(f2, 0, f2.length);
                        fs1.close();
                        fs2.close();

                        for(int k=0;k<f1.length;k++)
                            if(f1[k]!=f2[k])
                            {
                                match=false;
                                break;
                            }

                        if(match)
                        {
                            Toast.makeText(getApplicationContext(), "Same File", Toast.LENGTH_SHORT).show();

                        }

                    } catch (FileNotFoundException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

任何人都可以帮助如何逐字节地比较文件

2 个答案:

答案 0 :(得分:2)

InputStream.read()方法无法保证读取所有要求的字节;你必须检查返回值。

此外,对于大文件这样做会使用过多的内存;您可能需要考虑在循环中读取块,除非已知文件总是很小。

答案 1 :(得分:1)

无需分配大型数组,BufferedInputStream会为您缓冲。

BufferedInputStream fs1, fs2;
fs1 = new BufferedInputStream(new FileInputStream(file1));
fs2 = new BufferedInputStream(new FileInputStream(file2));
boolean match;
do {
    int b1 = fs1.read(),
        b2 = fs2.read();
    match = b1 == b2;
} while (match && b1 != -1);