Brauchen Schleife zum kopieren von Blöcken aus byte-array
Habe ich zum verarbeiten einer großen byte-array übergeben wird, meine Funktion. Brauche ich zum kopieren der Inhalte aus dieser eingehenden byte-array in kleineren "Brocken", um ein outbound-byte-array.
Für jeden "chunk" von Daten erstellt, die in der outbound-array, muss ich für den Aufruf eines web service.
Nach der Rückkehr, ich braucht, um wieder die Schleife durch die eingehende byte-array, weiter pass, eine ganze oder teilweise Brocken von Daten, bis die kompletten incoming-array verarbeitet werden (d.h. die an den Webdienst gesendet in Blöcken).
Ich bin sehr neu in C# und ich kämpfen mit einer Schleife, die funktioniert. Ich weiß, wie Sie zum aufrufen der web-Dienst zu verarbeiten, einen "chunk" aber ich kann nicht die Schleife korrekt. Hier ist eine Skizze von der erbärmlichen Schlamassel ich derzeit habe:
int chunkSize = 10000;
byte[] outboundBuffer = new byte[chunkSize];
while (BytesRead > 0)
{
long i = 0;
foreach (byte x in incomingArray)
{
BytesRead += 1;
outboundBuffer[i] = incomingArray[i]
i++;
}
uploadObject.Size = BytesRead;
uploadObject.MTOMPayload = outboundBuffer;
//call web service here and pass the uploadObject
//get next "chunk" until incomingArray is fully processed
}
Ich weiß, das ist eine Sauerei und funktioniert nicht; kann mir da jemand Skizze einer richtigen Schleife, um dies getan? Dank sehr viel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht möchten Sie sich in Array.Kopieren oder Puffer.BlockCopy; dies wird reinigen Sie die Dinge ein wenig, da Sie nicht haben, um kopieren Sie alle bytes einzeln:
Möchten Sie wahrscheinlich
Buffer.BlockCopy
(die rohsten der Kopien; ideal geeignet fürbyte[]
).Natürlich die andere Möglichkeit ist die Verwendung eines
MemoryStream
an die Stelle der outbound-array, und nurWrite
zu jeder Zeit, dann rufenToArray()
oderGetBuffer()
auf dieMemoryStream
(mitGetBuffer()
Sie brauchen, um zu sehen die Länge; mitToArray()
es beschnitten ist, automatisch für Sie):Warum nicht einfach ein Array verwenden.Kopieren?
http://msdn.microsoft.com/en-us/library/system.array.copy.aspx
zB.
Vorsichtig sein, aufrufen von web-services in einer Schleife synchron. Synchrone web-service-Aufrufe, dauert unbestimmte Zeit, aufgrund der Natur von HTTP und deine Schleife könnte für eine lange Zeit laufen. Es ist vorzuziehen, einen asynchronen Ansatz.
Scheinen Sie aufgebrochen, Ihre Aufgabe logisch, denn Sie haben ja zusammenhängend beschrieben es mit Worten. Jetzt gerade machen Sie Ihren code es tun.
Pseudo code könnte so etwas wie: