Java のこのコードが C++ よりも速いのはなぜですか? 2 つのファイルをバイト単位で比較する必要があります。たとえば、2 つのファイル サイズを比較すると、650mb は C++ で 40 秒、Java で 10 秒かかります。
C++ コード:
//bufferSize = 8mb
std::ifstream lFile(lFilePath.c_str(), std::ios::in | std::ios::binary);
std::ifstream rFile(rFilePath.c_str(), std::ios::in | std::ios::binary);
std::streamsize lReadBytesCount = 0;
std::streamsize rReadBytesCount = 0;
do {
lFile.read(p_lBuffer, *bufferSize);
rFile.read(p_rBuffer, *bufferSize);
lReadBytesCount = lFile.gcount();
rReadBytesCount = rFile.gcount();
if (lReadBytesCount != rReadBytesCount ||
std::memcmp(p_lBuffer, p_rBuffer, lReadBytesCount) != 0)
{
return false;
}
} while (lFile.good() || rFile.good());
return true;
そして Java コード:
InputStream is1 = new BufferedInputStream(new FileInputStream(f1));
InputStream is2 = new BufferedInputStream(new FileInputStream(f2));
byte[] buffer1 = new byte[64];
byte[] buffer2 = new byte[64];
int readBytesCount1 = 0, readBytesCount2 = 0;
while (
(readBytesCount1 = is1.read(buffer1)) != -1 &&
(readBytesCount2 = is2.read(buffer2)) != -1
) {
if (Arrays.equals(buffer1, buffer2) && readBytesCount1 == readBytesCount2)
countItr++;
else {
result = false
break;
}
}