ну, вонючие, мы должны написать цикл, но мне бы все-таки понравилось, если бы кто-то поместил цикл в это сообщение на форуме, чтобы я мог вырезать и вставить его очень быстро ... это было мое (и да, я хотел бы скорее основа во времени, но это только для модульных тестов, и они управляют имитируемым сервером, поэтому мне все равно + я не хочу, чтобы мой модульный тест зависал при сбое при вызове моего метода Read)
оложим, у меня есть простой протокол, реализованный через TCP, где каждое сообщение состоит из:
int
с указанием длины данных.Двоичные данные, длина которых указана в 1.Читая такое сообщение, я хотел бы что-то вроде:
int length = input.ReadInt();
byte[] data = input.ReadBytes(length);
С помощьюSocket.Receive
или жеNetworkStream.Read
Доступное количество байтов считывается. Я хочу позвонитьReadBytes
блокировать доlength
байты доступны.
Есть ли простой способ сделать это, без необходимости циклически читать, перезапуская со смещения в ожидании оставшихся данных?
В реальном приложении чтение, вероятно, должно выполняться в асинхронном режиме или в фоновом потоке, но я пока проигнорировал это. Важно иметь возможность завершить чтение, пока не будут доступны все данные.
редактироватьЯ знаю, что могу буферизовать данные самостоятельно, и я знаю, как это сделать. Это просто петля вокругReceive
это продолжается при следующем смещении.Я спрашиваю, есть ли многократно используемая реализация такого циклабез необходимости какого-либо собственного цикла (или, альтернативно, многоразовой реализации Async, которая завершается, когда все данные доступны).