nsstream

___ tag123nstream ___ NStream ist eine abstrakte Klasse für Objekte, die Streams darstellen. ___ qstnhdr ___ Enqueueing in NSInputStream? ___ tag123nsinputstream ___ hilf uns dieses Wiki zu bearbeiten ___ answer38213026 ___

Ihre Lösung ist eine gute Option, aber Sie können es mit einem Stream tun. Das bedeutet, dass Sie %code% ableiten müssen, und das ist nicht trivial, weil es eine Reihe von Methoden gibt, die Sie implementieren müssen.

Grundsätzlich würde Ihre Unterklasse zunächst die Header-Bytes zurückgeben, dann würde sie Bytes aus dem "internen" Stream zum Dateiinhalt zurückgeben, und wenn dies aufgebraucht ist, gibt sie die Fußzeilenbytes zurück. Es bedeutet, eine Aufzeichnung darüber zu führen, wie groß die Kopf- und Fußzeile ist und wie viel bisher verarbeitet wurde, aber das ist kein großes Problem.

Es gibt ein Beispiel für das Erstellen einer Unterklasse hier , die die trickreichen versteckten Methoden anzeigt, die Sie verwenden müssen implementiert werden, damit die Stream-Unterklasse ordnungsgemäß funktioniert, ohne Ausnahmen auszulösen.

    
___ tag123ios ___ iOS ist das mobile Betriebssystem, das auf dem Apple iPhone, iPod touch und iPad ausgeführt wird. Verwenden Sie dieses Tag [ios] für Fragen zur Programmierung auf der iOS-Plattform. Verwenden Sie die verwandten Tags [objective-c] und [swift] für Probleme, die für diese Programmiersprachen spezifisch sind. ___ qstntxt ___

Ich würde gerne drei "Teile" zu einem NSInputStream hinzufügen: einen NSString, eine Ausgabe von einem anderen Stream und dann einen weiteren NSString. Die Idee ist folgende:

Der erste und der letzte NSStrings stellen den Anfang und das Ende einer SOAP-Anfrage dar, während die Ausgabe aus dem Stream das Ergebnis des Ladens einer sehr großen Datei und deren Codierung als Base64-String ist. Also, am Ende hätte ich den letzten NSInputStream, der die gesamte SOAP-Anfrage so hält:

& lt; Seifenanfang & gt; & lt; Base64 codierte Daten & gt; & lt; Seifenend & gt;

Der Grund, warum die gesamte Anfrage in NSInputStream gehalten werden soll, ist zweifach:

  1. Ich was nicht, um die sehr große Datendatei in den Speicher
  2. zu laden
  3. Ich denke, dass dies die einzige Möglichkeit ist, das Senden der letzten Anfrage in HTTP 1.1-Chunks zu erzwingen (was ich benötige, weil der Server dies sonst nicht akzeptiert, wenn die Anfrage zu groß wird). Also, das weiß ich:

    %Vor%

stellt sicher, dass die Anfrage als HTTP 1.1-Chunks und nicht als eine riesige rohe SOAP-Anfrage gesendet wird.

Ich frage mich also, wie das erreicht werden kann - nämlich, wie kann ich Dinge in einen NSInputStream "einreihen"? Kann es überhaupt gemacht werden? Gibt es einen alternativen Weg?

Nur zur Referenz, in Java kann dies wie folgt gemacht werden

%Vor%

weil Java diese Objekte verfügbar hat, aber NStreams in objective-c wie Objekte sehr niedriger Ebene aussehen und mit denen sehr schwer zu arbeiten ist.

Hinweis: Ich habe die ursprüngliche Frage komplett neu geschrieben, wie ich es vor zwei Tagen gefragt habe, da ich denke, dass der neue Text deutlicher erklärt, was das Problem ist. Ich hoffe, es würde helfen, dass es leichter verstanden und vielleicht beantwortet wird.

UPDATE 2

Hier ist das, was ich bisher erreichen konnte: Anstatt zu versuchen, in einen Stream einzuordnen, verwende ich eine temporäre Datei, um zuerst das & lt; Soap-Anfang & gt ;, dann richte ich einen Eingabestrom ein, um aus der Datei in Chunks zu lesen, jeden Chunk als Base64-String zu codieren und diesen in die gleiche temporäre Datei zu schreiben. Schließlich, wenn mein Stream schließt, schreibe ich den & lt; Seifenend & gt; in die temporäre Datei. Dann richte ich einen weiteren Eingabestream mit dem Inhalt dieser Datei ein, den ich an NSMutableURLRequest weitergebe:

%Vor%

Dies stellt eine chunked HTTP 1.1 Übertragung der Inhalte der Datei sicher. Wenn die Verbindung beendet ist, löschen Sie die temporäre Datei.

Das scheint gut zu funktionieren, aber das ist natürlich eine lästige Arbeit. Ich möchte nicht in eine temporäre Datei schreiben, wenn alles durch Streams verarbeitet werden könnte (idealerweise.) Wenn jemand noch bessere Vorschläge hat, lass es mich wissen:)

UPDATE 3

OK, ein anderes Update ist in Ordnung. Während mein Schreiben in die Datei zu funktionieren scheint, stößt ich jetzt auf ein unerwartetes Problem, da einige meiner Anfragen nicht auf den Server hochgeladen werden konnten. Insbesondere läuft alles nach Plan, ich lese den Inhalt der Temp-Datei in einen Stream und setze den HTTP-Body meiner Anfrage als diesen Stream und es beginnt mit der Übertragung der HTTP 1.1-Chunks, so wie ich es möchte - aber für einige Grund dafür ist, dass einige Pakete gelöscht werden und die letzte Anfrage - das ist meine Vermutung - wird missgebildet und scheitert daher. Ich denke, das Problem der verlorenen Pakete ist zufällig, weil ich es bei größeren Anfragen beobachte - das heißt, das Problem hat einfach mehr Chancen, aufzutauchen, während meine kleineren Anfragen normalerweise gut gehen. Dies ist natürlich ein anderes Problem als das Original in dieser Frage. Wenn jemand eine gute Idee hat, was das verursachen könnte, fragte ich nach dem Problem hier: Pakete, die während der von NSURLConnection gesendeten Chunked HTTP 1.1-Anforderung gelöscht wurden

    
___
1
Antwort

Verbindung zum Redis-Server mit NS Stream in Swift

Hallo alle, wie der Titel erwähnt Ich versuche, Daten von meinem Redis-Server in schneller Sprache zu senden und zu empfangen. Ich habe viel recherchiert und kann keine gute Antwort zu diesem Thema finden. Am nächsten komme ich zu% cos_de% oder...
11.08.2015, 21:40
1
Antwort

Ist es möglich, den NSRunLoop / NSThread zu ermitteln, der einem offenen NStream zugeordnet ist?

Ich verwende ein Framework von Drittanbietern (und muss es verwenden), zu dem ich keine Quelle habe. Das Framework des Drittanbieters übernimmt die Erstellung einer authentifizierten Client / Server-Verbindung und gibt ein Paar geöffneter NStrea...
24.05.2012, 15:04
2
Antworten

Warnung: Vergleich der Konstante 8 mit dem Ausdruck vom Typ XXXX ist immer falsch

Ich habe ASIHTTPRequest in meinem Projekt verwendet, aber in der Datei ASIDataCompressor.m line 190 : %Vor% es warnt mich dies: Kann jemand es reparieren? thx     
21.12.2012, 02:44
1
Antwort

NStream SSL auf dem verwendeten Socket

Ich schreibe eine Anwendung, die die SSL-Funktionen von NStream auf dem iPhone verwendet. Ich weiß, dass SSL funktioniert, weil ich Server direkt über SSL verbinden kann. Ich habe ein Problem festgestellt, bei dem Protokolle, die starttls verwe...
10.02.2010, 15:04
5
Antworten

NStreams Absturz-Programm!

Alle, Ich habe es bis hierher durch Kommentare, Breakpoints usw. heruntergefahren. Das Programm stürzt bei dem markierten Code ab. %Vor% Es stürzt nicht ab, wenn ich beide auskommentiere, aber es stürzt ab, wenn ich einen ausdepretiere (d...
13.07.2011, 22:26
2
Antworten

NStreamDelegate empfängt NSStreamEvent.HasSpaceAvailable nicht:

Ich hatte meinen Code in einem anderen Projekt in einer Klasse mit der folgenden Signatur: %Vor% Dann habe ich die Verbindung in die eigene Klasse verschoben, damit ich sie in jeder Verbindung wiederverwenden kann: %Vor% Als ich das geta...
22.10.2014, 05:22
1
Antwort

Enqueueing in NSInputStream?

Ich würde gerne drei "Teile" zu einem NSInputStream hinzufügen: einen NSString, eine Ausgabe von einem anderen Stream und dann einen weiteren NSString. Die Idee ist folgende: Der erste und der letzte NSStrings stellen den Anfang und das Ende...
05.03.2013, 23:28