0

2 つの同じサイズのファイルをバイトごとに比較して、重複を確認したいと考えています。

このコードを使用して比較していますが、機能していません:

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();
                    }

誰でもファイルをバイトごとに比較する方法を手伝ってもらえますか

4

2 に答える 2

2

このInputStream.read()メソッドは、要求されたすべてのバイトを読み取ることが保証されていません。戻り値を確認する必要があります。

また、大きなファイルの場合、この方法で行うとメモリが過剰に使用されます。ファイルが常に小さいことがわかっている場合を除き、ループでチャンクを読み取ることを検討することをお勧めします。

于 2012-12-19T09:46:05.827 に答える
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);
于 2012-12-19T10:01:14.320 に答える