Если вам известна длина данных до того, как вы начнете их использовать, то: вы можете выделить простое byte[]
и заполнить его в цикле чтения, просто увеличивая смещение каждого чтения на количество прочитанных байтов (и уменьшая его).ваше "число байтов, к которым вы можете прикоснуться). Это делает зависящим от наличия read
перегрузки / API, который принимает либо смещение, либо указатель.
Если этоне вариант: GetBuffer()
- ваша лучшая ставка - она не дублирует данные, скорее, она вручает вам текущий возможно слишком большой byte[]
. Поскольку он слишком большой, вы должны рассмотреть его вкомбинации с текущим .Length
, возможно, оборачивая пару длина / данные либо в ArraySegment<byte>
, либо в Span<byte>
/ Memory<byte>
.
В сценарии «длина известна», если выЕсли вы готовы работать с большими буферами, вы также можете рассмотреть арендованный массив через ArrayPool<byte>.Shared
- арендуйте один из по крайней мере этого размера, заполните его, затем ограничьте ваш сегмент /охватывают населенную часть (аи не забудьте вернуть его в бассейн, когда закончите).