Подтвердить что ты не робот

В чем разница между BufferedStream и MemoryStream с точки зрения приложения?

В чем разница между BufferedStream и MemoryStream с точки зрения приложения? Так как MemoryStream может быть сброшен в файл в любое время, не может ли он заменить BufferedStream?

4b9b3361

Ответ 1

BufferedStream - это просто буфер поверх существующего потока. MemoryStream - это буфер для всего потока - он не привязан к другому. Вы можете попросить его записать себя в другой поток в любое время, но это не то же самое.

Одна из основных причин буферизации - избегать частой записи на дорогостоящие ресурсы. Однако это не означает, что вы хотите буферизовать все данные в памяти - этого достаточно, чтобы избежать очень маленьких записей. Например, если FileStream не имеет своей собственной стратегии буферизации, то ее упаковка в BufferedStream может закончиться тем, что буфер составляет всего 8 КБ, даже если вы пишете мегабайты данных. Как отмечалось в комментариях, FileStream имеет достаточную буферизацию, что использование BufferedStream в сочетании с ней бессмысленно.

Ответ 2

BufferedStream должен быть инициализирован каким-либо другим существующим потоком. Простое закрытие запускает поток буфера в базовый поток. Это необходимо для работы с потоком без памяти, но вам нужно (авто) -буферование.

MemoryStream может существовать самостоятельно, но также может быть сброшен в другие потоки, как вы сказали, но "явно".

Если ваша работа работает только с памятью, лучше использовать MemoryStream. В противном случае BufferedStream.