gpt4 book ai didi

java - 考虑内存的文件比较

转载 作者:行者123 更新时间:2023-12-02 07:23:50 24 4
gpt4 key购买 nike

我想比较两个文件,一个在文件系统中,另一个是从 HTTP URL 下载的。

我们尝试通过 byte[] 数组进行比较(我们使用 Apache 的 HTTPRequestBuilder),但担心文件可能太大并且可能会耗尽内存。我们有什么好的替代方案吗?

最佳答案

您可以通过一次仅读取一个缓冲区来比较两个 InputStream 对象的内容。当您从每个流中“用完”时,您需要读取数据,请注意,当您调用 read 时,您可能不会真正读取完整的缓冲区。

如果缓冲区中的每个字节比较相等并且流同时用完数据,则两个流相等。我怀疑代码可能有点繁琐,但应该不会太糟糕。

事实上,对于更简单的代码,如果将每个 InputStream 包装在 BufferedInputStream 中,您可能只是逐字节比较(在每次迭代时调用无参数 read() 方法)而不会损失太多性能:

public boolean equals(InputStream x, InputStream y)
{
// TODO: Only wrap them if they're not already buffered
x = new BufferedInputStream(x);
y = new BufferedInputStream(y);

while (true)
{
int xValue = x.read();
int yValue = y.read();
if (xValue != yValue)
{
return false;
}
if (xValue == -1)
{
// Reached the end of both streams at the same time
return true;
}
}
}

关于java - 考虑内存的文件比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13815356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com