Короткий ответ:
Тот факт, что у вас есть два метода, один из которых принимает имя файла, а другой принимает поток, просто для удобства. Внутри тот, у кого есть имя файла, откроет файл как поток и вызовет другой метод.
Подробный ответ
Вы можете рассматривать поток как последовательность байтов. Причина использования потока вместо byte[]
или List<byte>
заключается в том, что если последовательность очень, очень большая, и вам не нужен доступ ко всем байтам одновременно, было бы напрасно помещать все байты в памяти до их обработки.
Например, если вы хотите вычислить контрольную сумму для всех байтов в файле: вам не нужно помещать все данные в память, прежде чем вы сможете начать вычисление суммы. На самом деле достаточно всего, что может эффективно доставлять вам байты один за другим.
Вот почему люди хотят читать файл как поток.
Причина, по которой людям нужен поток в качестве входных данных для своих данных, заключается в том, что они хотят дать вызывающей стороне возможность указать источник своих данных: вызывающие могут предоставить поток, который считывается из файла, а также поток с данными из Интернет, или из базы данных, или из текстового поля, процедуре все равно, если она может читать байты один за другим или иногда по частям байтов:
using (Stream fileStream = File.Open(fileName)
{
ProcessInputData(fileStream);
}
Or:
byte[] bytesToProcess = ...
using (Stream memoryStream = new MemoryStream(bytesToProcess))
{
ProcessInputData(memoryStream);
}
Or:
string operatorInput = this.textBox1.Text;
using (Stream memoryStream = new MemoryStream(operatorInput))
{
ProcessInputData(memoryStream);
}
Заключение
Методы используют потоки в своем интерфейсе, чтобы указать, что им не нужны все данные в памяти сразу. Достаточно одного или каждого куска. Вызывающий может решать, откуда берутся данные.
person
Harald Coppoolse
schedule
12.04.2021