gpt4 book ai didi

stream - computeHash byte[] 和 Stream 的区别

转载 作者:行者123 更新时间:2023-12-04 21:25:44 25 4
gpt4 key购买 nike

我在使用 computeHash 时遇到了一些麻烦。我同时使用computeHash(Stream) 和computeHash(byte[])。出于某种原因,他们正在回馈不同的结果。我试过将 byte[] 写入 MemStream,但使用 Byte[] 时结果相同

FileStream zz = new FileStream(t.Filename, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(zz, Encoding.ASCII);
byte[] data = Encoding.ASCII.GetBytes(sr.ReadToEnd());
MemoryStream memStream = new MemoryStream(data);
byte[] test = md5hash.ComputeHash(memStream);

我已关闭文件以确保查找位置在起点。
zz = new FileStream(t.Filename, FileMode.Open, FileAccess.Read);
zz.Position = 0;
byte[] test1 = md5hash.ComputeHash(zz);

有什么建议?我唯一的猜测是它要么是编码问题,要么是 Stream 的大小不同。

任何帮助将非常感激。

此致,
太阳城

最佳答案

某些文件编码具有隐藏字符以提醒消费者应用程序注意文件格式。一种组合是:





我有一个格式为 UTF8 的文件,并运行以下命令:
byte[] asciidata, streamdata;
using (var zz = new FileStream("utf8.txt", FileMode.Open, FileAccess.Read))
{
var sr = new StreamReader(zz, Encoding.ASCII);
asciidata = Encoding.ASCII.GetBytes(sr.ReadToEnd());
}

using (var zz = new FileStream("utf8.txt", FileMode.Open, FileAccess.Read))
{
streamdata = new byte[asciidata.Length + 3];
zz.Read(streamdata, 0, streamdata.Length);
}

变量 asciidata在我的文本文件中包含四个字符,但 streamdata包含以上述三个魔法字符为前缀的四个字符(总共七个字符)。

总之,我相信你怀疑编码是罪魁祸首是正确的。

关于stream - computeHash byte[] 和 Stream 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3613902/

25 4 0