Нужен цикл для копирования блоков с массива байтов

Код хорошо работает на моей стороне (в IE 11). Попробуйте использовать средства разработчика F12, чтобы проверить элементы документа, проверить, изменился ли URL. Также вы можете попробовать сбросить настройки браузера IE или переустановить браузер IE.

8
задан Chetan Sastry 24 February 2009 в 22:50
поделиться

5 ответов

Вы могли бы хотеть изучить Массив. Копия или Буфер. BlockCopy; это очистит вещи немного, так как Вы не должны будете копировать все байты индивидуально:

int incomingOffset = 0;

while(incomingOffset < incomingArray.Length)
{
   int length = 
      Math.Min(outboundBuffer.Length, incomingArray.Length - incomingOffset);

   // Changed from Array.Copy as per Marc's suggestion
   Buffer.BlockCopy(incomingArray, incomingOffset, 
                    outboundBuffer, 0, 
                    length);

   incomingOffset += length;

   // Transmit outbound buffer
 }
19
ответ дан 5 December 2019 в 06:54
поделиться

Опасайтесь называть веб-сервисы в цикле синхронно. Синхронные вызовы веб-сервиса занимают время из-за природы HTTP, и Ваш цикл мог бы работать в течение долгого времени. Желательно использовать асинхронный подход.

0
ответ дан 5 December 2019 в 06:54
поделиться

Почему не только используют Массив. Копия? http://msdn.microsoft.com/en-us/library/system.array.copy.aspx

например.

Array.Copy(srcBuffer, destBuffer, 1024);
3
ответ дан 5 December 2019 в 06:54
поделиться

Вы, вероятно, хотите Buffer.BlockCopy (самая сырая из копий; идеально подходящий для byte[]).

Конечно, другая опция состоит в том, чтобы использовать a MemoryStream вместо исходящего массива, и просто Write к нему каждый раз, затем звоните ToArray() или GetBuffer() на MemoryStreamGetBuffer(), необходимо наблюдать длину; с ToArray() это обрезается для Вас автоматически):

MemoryStream ms = new MemoryStream();
byte[] buffer = new byte[BUFFER_SIZE];
int bytesReceived;
while((bytesReceived = GetNextChunk(buffer, 0, BUFFER_SIZE)) > 0) {
    ms.Write(incomingArray, 0, bytesReceived);
}
byte[] final = ms.ToArray();
4
ответ дан 5 December 2019 в 06:54
поделиться

Вы, кажется, сломали свою задачу логически, в конце концов, Вы когерентно описали ее со словами. Теперь просто заставьте свой код сделать это.

Псевдо код мог бы быть чем-то как:

while (there are chunks in incoming array)
    copy 1 chunk to outbound array
    create uploadObject
    call webservice
endwhile
-2
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: