Networking am iPhone mit großen Daten

  • Networking am iPhone mit großen Daten

    Hallo,

    in einem meiner Projekte will ich Daten zwischen zwei iPhones oder zwischen iPhone und PC, etc austauschen. Dabei kann es aber durchaus vorkommen dass diese Daten "sehr" groß werden. Also zu groß um so ein Paket auf einmal im Speicher des iPhones zu halten. Welche Möglichkeiten seht ihr da um solche Pakete zu verschicken? Die Daten selbst kommen aus CoreData und sollen, wenn neue daher kommen, auch wieder da rein.

    Vielen Dank für jegliche Info.

    Lg
  • Ok... beim empfangen kann ich alles in eine Datei streamen, aber um diese dann zu verarbeiten muss ich sie ja auch mal in den Speicher laden, oder?



    Hier mal mein Denkproblem....

    Ich habe ein Dictionary mit Werten... kann zb so ausschauen

    Quellcode

    1. {
    2. values : [
    3. {
    4. timestamp:...
    5. value:... (kann zb ein base64 codiertes Bild sein....)
    6. },
    7. {
    8. ....
    9. },
    10. und da kommt jetzt noch richtig viel mehr!!!
    11. ]
    12. }
    Alles anzeigen


    Das würden wir gerne in einen JSON String verwandeln und dann an die Netzwerkklasse übergeben. Und die soll's dann senden.
    Um jetzt aber dieses Dictionary zu erstellen müssten alle Daten schon mal im Speicher sein, oder? Und da kann es unter Umständen vorkommen das es zuviel wird.

    Alternativ könnte man natürlich die einzelnen Values

    Quellcode

    1. {
    2. timestamp:...
    3. value:...
    4. }

    versenden.... Was aber wenn so ein Ding allein schon zb. 50MB hat weils zb ein Video oder so ist? Wie erstelle ich mir dann das Dictionary das ich in einen JSON String verwandle?

    Ich steh da derzeit ein bisschen auf der Leitung :)
  • BliBlaBlo schrieb:

    Ok... beim empfangen kann ich alles in eine Datei streamen, aber um diese dann zu verarbeiten muss ich sie ja auch mal in den Speicher laden, oder?
    Ja, aber Du musst sie nicht komplett sondern nur stückweise im Speicher haben. Wenn Du eine NSURLConnection verwendest, bekommst Du die Daten ja in Blöcken und die kannst Du sukzessive an eine Datei hängen.

    BliBlaBlo schrieb:

    versenden.... Was aber wenn so ein Ding allein schon zb. 50MB hat weils zb ein Video oder so ist? Wie erstelle ich mir dann das Dictionary das ich in einen JSON String verwandle?
    Du solltest kein komplettes Video in eine JSON-Datei packen, da es dort ja noch mal um den Faktor 1,5 bis 2 größer wird. Stattdessen solltest Du nur URLs auf Deine Videos senden.
    „Meine Komplikation hatte eine Komplikation.“
  • Mir ist schon klar dass ich die Datenstückchen die ich bekomme auch einfach nur in eine Datei schreiben kann.
    Nur wenn ich mir jetzt dann diesen JSON string der daherkommt in eine Datei schreibe, die dann am Ende zu groß ist um sie auf einmal im Speicher zu haben, dann muss ich mir selbst einen Parser schreiben der diese Datei byteweise durchgeht, große zusammengehörige Dinge daraus in eine eigene File schreibt und dann aus der originalen Datei gegen einen lokalen Pfad austauscht, oder?

    Wieso sollte das Video (was ein schlechtes Beispiel ist... eher schicken wir größere Bilder oder Audiodatein.... sollte aber prinzipiell egal sein...) größer sein wenn ich es im JSON eincodiert mitschicke? Verstehe ich nicht ganz :)
  • BliBlaBlo schrieb:

    Wieso sollte das Video (was ein schlechtes Beispiel ist... eher schicken wir größere Bilder oder Audiodatein.... sollte aber prinzipiell egal sein...) größer sein wenn ich es im JSON eincodiert mitschicke?

    Du kannst keine Binärrohdaten schicken. Sie könnten ja Zeichen enthalten, die den JSON-Parser durcheinander bringen (z. B. ', ", {, }) von nicht druckbaren Zeichen ganz zu schweigen. Du musst sie entweder in eine hexadezimale (Faktor 2) oder Base-64 kodierte (Faktor 1,5) Zeichenkette umwandeln. Wie geschrieben, Du solltest Binärdaten nur als URL in der JSON-Datei ablegen. Das hat zwei positive Effekte. Die JSON-Datei wird wesentlich kleiner und Du brauchst die großen Datenmengen nur zu laden, wenn Du sie wirklich brauchst.
    „Meine Komplikation hatte eine Komplikation.“