2016-07-20 3 views
-2

У меня есть задача считывать данные из источника в кусках и хранить весь результат в массиве байтов. В частности, мне нужно сделать последующие вызовы «Socket.Receive». Я хотел бы выделить массив байтов с конечным размером заранее и каждый раз указывать позицию в массиве для копирования данных. Это, чтобы избежать дополнительной копии. В C++ вы просто присваиваете смещение массива. Не удалось выяснить, как дать методу приема местоположение в середине массива байтов ...C# байт-массив - запись в середине

Можно ли это сделать на C#?

+2

Как трудно вы [смотрите] (https://msdn.microsoft.com/en-us/library/w3xtz6a5 (v = vs.110) .aspx)? –

+0

Если вы знаете общую длину данных и хотите сохранить их все в одном массиве, вы можете использовать 'Array.Copy', который позволяет копировать содержимое одного массива в другой с заданным смещением источника и смещением назначения , –

+0

@YeldarKurmangaliyev, что * будет работать *, но в этом случае не обязательно –

ответ

0

Есть перегрузки до Receive, которые принимают смещение и считаются считанными. Вы можете использовать их: https://msdn.microsoft.com/en-us/library/system.net.sockets.socket.receive(v=vs.110).aspx - для конкретного примера: https://msdn.microsoft.com/en-us/library/w3xtz6a5(v=vs.110).aspx

+0

Точно, что мне нужно, спасибо! – user4212919

+0

@ user4212919 подсказка: если вы используете Visual Studio, когда вы нажимаете '.' (для' socket.Whatever'), вы получаете всплывающее окно intellisense; если вы разрешили имя метода, вы можете нажать стрелки вверх и вниз, чтобы показать все доступные перегрузки. В принципе, вся эта информация ** доступна ** прямо в редакторе: http://i.stack.imgur.com/g72P2.png –

Смежные вопросы