httpURLConnection: setFixedLengthStreamingMode oder setRequestProperty("content-length",...

  • Antworten:2
Bärbel R.
  • Forum-Beiträge: 14

14.09.2016, 11:26:08 via Website

Hallo Leute,
dank der Hilfe im Forum habe ich es geschafft, aus meiner Android-App auf Daten einer SQL-DB auf einem Server zuzugreifen.
Für mein POST erstelle ich einen contentXmlString, mit dem ein Insert eines neuen Objektes in die DB ausgeführt wird. Dazu habe ich eine Frage:
Für bessere Performance lege ich die feste Größe des Ausgabestroms fest. Der POST funktioniert sowohl mit:

httpURLConnection.setFixedLengthStreamingMode(contentXmlString.length());

als auch mit:

httpURLConnection.setRequestProperty("content-length", Integer.toString(contentXmlString.length()));

Was ist besser? Worin besteht der Unterschied?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.09.2016, 13:51:59 via Website

Hallo Bärbel,
So wie ich das verstanden habe, setzt du per setFixedLenght...() die exakte Länge des OutputStreams.
Dies verhilft der Connetion, schon im Vorfeld zu wissen wieviele Daten geschickt werden, damit kann der Connectionheader ( also das was du mit setRequestProperty setzt), schneller generiert werden und evtl. ist dann der ganze sende Vorgang schneller.
Also wenn die die fixe länge setzt ist die RequestProperty obsolete.

ABER: bisher nimmst du die String länge, aber eigentlich musst du die Byte Array länge angeben. Du hast glück das das im moment gleich ist, aber sollte ein character aus irgend einem grund 2 oder mehr Bytes entsprechen, hast du ein Problem. Also lieber getBytes()und davon die Länge.

Hier noch was zum nachlesen: http://stackoverflow.com/a/13105638

LG Pascal //It's not a bug, it's a feature. :) ;)

Bärbel R.

Antworten
Bärbel R.
  • Forum-Beiträge: 14

14.09.2016, 15:34:39 via Website

Hallo Pascal,
wieder einmal hast du mir sehr geholfen. Besonders deinen Tipp zum Nachlesen finde ich toll. Ich habe gerade mein Programm noch einmal überarbeitet.
Vielen Dank!
Bärbel

Pascal P.

Antworten