HttpURLConnection: cosa impostare setFixedLengthStreamingMode () vuole la dimensione di?

Sto cercando di caricare un tampone di immagini jpeg che sono tornato dalla camera. Conosco la lunghezza, ma se passai solo quella lunghezza alla routine setFixedLengthStreamingMode () ho degli errori nel logcat che mi dice che prevedeva una dimensione diversa. Non so se questo è un bug android (sto eseguendo 2.3.3 su questo dispositivo), o dovrei aggiungere le size delle intestazioni in aggiunta ai dati POST o cosa. Posso usare setChunkedStreamingMode (0) e questo funziona bene, ma stavo pensando che sarebbe bello evitare il sovraccarico di copiare i dati. Sembra sempre essere 155 byte fuori, tranne quando aggiungo in modo arbitrario 155 byte, poi mi dice che sono 2 byte off :-).

  • Adb su wireless senza cavo usb affatto
  • Con che cosa posso sostituire i methods obsoleti http?
  • L'intento in sospeso fa sempre nuove attività
  • Perché è necessario che il GCM funziona per i dispositivi al di sopra di 4.0.4 OS?
  • Devo commentare le mie chiamate al registro quando creo il mio pacchetto finale?
  • Perché il menu a discesa di overflow si trova nella parte superiore della barra di azione?
  • Ottenere il frammento associato dynamicmente a <FrameLayout>?
  • Come mettere in pausa / riprendere una logging creata con mediarecorder?
  • Come implementare un android: background che non si estende?
  • Come aggiungere gridview setOnItemClickListener
  • Android: Ruota l'image in immagini in un angolo
  • Estensione di ArrayAdapter in android
  • One Solution collect form web for “HttpURLConnection: cosa impostare setFixedLengthStreamingMode () vuole la dimensione di?”

    L' URLConnection per impostazione predefinita, URLConnection tutto ciò che è stato scritto nel suo getOutputStream() nella memory del client finché non è chiuso. Questo è obbligatorio perché è necessario impostare l'intestazione HTTP Content-Length . Ma la lunghezza del contenuto è nota solo una volta che tutti i byte sono stati scritti. Ciò potrebbe essere la perdita di memory quando il corpo di risposta è relativamente grande.

    Se si conosce in anticipo l'esatta quantità di byte (nota: byte, non caratteri) scritti, è ansible utilizzare setFixedLengthStreamingMode() per impostarla con esattamente quella quantità di byte, in modo che l'intestazione Content-Length possa essere impostata molto prima e in modo che URLConnection possa scorrere più spesso. Nel tuo caso particolare, apparentemente hai usato il valore sbagliato.

    Il setChunkedStreamingMode() modifica sostanzialmente la codifica di trasferimento in chunked . Questa è sostanzialmente una row con la lunghezza di byte in esadecimale e poi una row di byte scritti e successivamente una row vuota (vedi anche wikipedia ). L'ultima row ha una lunghezza di byte di 0 e quindi il server sa quando è la fine del corpo in modo che non deve aspettare i dati in entrata. Ciò consente al corpo di risposta di essere più spesso filtrato. Non dovresti solo impostarla con 0, ma con un valore sensibile, ad esempio 1000 o giù di lì. In questo modo each 1000 byte scritti verrà inviato come nuovo pezzo.

    Guarda anche:

    • Utilizzando java.net.URLConnection per lanciare e gestire le richieste HTTP
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.