我不明白我从下面的代码中得到的结果,有人可以解释一下。仅在读取UNICODE编码的文本文件时发生。
fs = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
// read from start
byte[] lne = new byte[100];
int actual = fs.Read(lne, 0, lne.Length);
string line = Encoding.Unicode.GetString(lne, 0, actual); // ok readable stuff as expected
string line1 = Encoding.BigEndianUnicode.GetString(lne, 0, actual); // fail as expected
// move down into the file
fs.Seek(-150, SeekOrigin.End);
fs.ReadByte(); // take this out, works ok!
lne = new byte[100];
actual = fs.Read(lne, 0, lne.Length);
line = encoding.GetString(lne, 0, actual); // fail non readable stuff - NOT EXPECTED
line1 = Encoding.BigEndianUnicode.GetString(lne, 0, actual); // SUCCESS, readable - huh!
显然代码不是“真实世界”,它只是我真实代码正在做什么的细分。
在第一个 Encoding.Unicode.GetString 之后,我可以在变量“line”中看到良好的可读数据,并在“line1”中看到糟糕的数据。
在第二个 Encoding.Unicode.GetString 之后,我看到了完整的废话(我不知道日语/中文),但 line1 现在包含来自文件的可读数据。
如果我取出 ReadByte,一切都会按预期工作。
任何人都知道为什么会这样。
TIA。