以下のハッキングされたコードから得られる結果がわかりません。誰か説明してください。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' に不適切なデータが表示されます。
2 番目の Encoding.Unicode.GetString の後、完全ながらくたが表示されます (日本語/中国語はわかりません) が、line1 にはファイルから取得した読み取り可能なデータが含まれるようになりました。
ReadByte を取り出すと、すべてが期待どおりに機能します。
なぜこれが起こっているのか、誰にでもアイデアがあります。
ティア。