Выход за границы массива при чтении файла + оптимизация
Функция на чтение большого текстового файла, вывод работы функции представляет собой: смещение/разделитель/байтовое представление восьми символов/разделитель/байтовое представление следующих восьми символов/представление 16 байтовых символов по таблице ASCII. Проблема в строке с комментарием (ошибка указана в комментарии) + программа должна работать с большими файлами (начиная с 4 гб и выше), поэтому если увидите вариант оптимизации функции, смело предлагайте.Ошибка выводится при работе не с каждым файлом,некоторые отрабатывают нормально.
Одна из строчек вывода:
000010: 50-4B-03-04-14-00-06-00 ||| 08-00-00-00-21-00-32-91 ||| PK..........!.2"
public static string FileProcess(string filename)
{
var specialSybmol = (byte)'.';
var fs = new FileStream(filename,FileMode.Open,FileAccess.Read);
var array = new byte[fs.Length];
fs.Read(array, 0, array.Length);
int offset = 0;
var bt1 = new byte[8];
var bt2 = new byte[8];
StringBuilder outputString = new StringBuilder(100000);
for(int i = 0; i < array.Length;)
{
outputString.Append((offset * 10).ToString().PadLeft(8, '0') + "::: ");
offset++;
Array.Copy(array,i, bt1, 0, Math.Min(8, fs.Length - i));
if(array.Length > i + 8)
Array.Copy(array,i + 8,bt2,0, Math.Min(8, fs.Length - i));//System.ArgumentException: "Длина исходного массива недостаточна. Проверьте значения srcIndex и длины, а также нижние границы массива."
for (int j = 0; j < bt1.Length; j++)
{
if (bt1[j] < 0x20 || bt1[j] > 0x7f) bt1[j] = specialSybmol;
if (bt2[j] < 0x20 || bt2[j] > 0x7f) bt2[j] = specialSybmol;
}
outputString.Append($"{BitConverter.ToString(bt1)} ||| {BitConverter.ToString(bt2)} ||| ");
outputString.Append($"{Encoding.ASCII.GetString(bt1)}{Encoding.ASCII.GetString(bt2)}\n");
i += 16;
}
fs.Close();
return outputString.ToString();
}