Ich schreibe auf Ausgabestrom über verschiedene Methoden. Wie kann ich, bevor ich es schließe, die Inhaltslänge des Ausgabestroms herausfinden?Antwort Ausgangsstrom-Inhaltslänge?
Antwort
Der einfachste Weg ist wahrscheinlich, es in eine andere OutputStream
Implementierung zu wickeln, die auf alle Schreibanforderungen weiterleitet, aber einen internen Zähler führt. Dann schreibst du stattdessen einfach dazu. Sollte nicht zu schwer zu implementieren sein - und vielleicht gibt es auch schon einen.
EDIT: Erraten nur bei einem vernünftigen Namen (CountingOutputStream
) kam mit einer Implementierung in Apache Commons IO.
EDIT: Wie an anderer Stelle erwähnt, wenn dies für HTTP ist und Ihr Client ist nicht bereits Pufferung der vollständigen Daten (in diesem Fall hätte ich gedacht könnte die Inhaltslänge erarbeiten), können Sie Probleme haben, weil die Länge vor geschrieben werden muss, um die Daten zu schreiben. In einigen Fällen können Sie feststellen, dass es bis zu einer bestimmten Größe funktioniert (die der Client puffert) und dann fehlschlägt. In diesem Fall werden Davids Lösungen angemessen sein.
Sie können in Erwägung ziehen, in Ihren eigenen ByteArrayOutputStream zu schreiben und ihn am Ende des Antwort-Ausgabestreams zu bündeln.
Das wird jedoch sehr Speicherhunger sein, da jedes Byte eines Bytes [] ein Byte des JVM-Speichers frisst. – BalusC
Das Problem besteht darin, dass Sie die Inhaltslänge im Antwortheader festlegen müssen, bevor Sie mit dem Schreiben von Daten in den Ausgabestream beginnen. Ihre Optionen sind also:
- 1. DNS Antwort Antwort & autoritativen Abschnitt
- 2. Laravel - Antwort :: oder Antwort() - welche ist besser
- 3. iOS Swift: Antwort Antwort Json mit AFNetworking
- 4. Antwort Antwort String zu Setup Webhook
- 5. WOFF2 - HTTP-Antwort Antwort-Header-Vorschlag
- 6. Rohr superagenten Antwort auf Express-Antwort
- 7. bearbeiten json Antwort von curl Antwort
- 8. nativescript-background-http Antwort Antwort Körper
- 9. Lesehttppost Antwort
- 10. RESTService Antwort
- 11. Resteasy Antwort
- 12. Parsen Bit.ly JSON Antwort in Javascript (URL in JSON Antwort)
- 13. Parsen Antwort Antwort Json in ein Objekt mit Angular2
- 14. Wie bekomme ich Antwort Antwort von AWS Lambda-Funktion
- 15. Antwort Antwort Körper in Datei von curl Anfrage
- 16. Veröffentlichen Sie die Antwort, und verwenden Sie die Antwort SWIFT
- 17. Jmeter HTTP-Antwort zeigt keine Cookies oder Header-Antwort
- 18. Apache httpd: Bedingt festgelegt Antwort Header auf anderen * Antwort * Header
- 19. Wie benutzerdefinierte XML-Antwort in soapServer Antwort zurückgeben?
- 20. Konstruieren von JSON-Antwort. NodeJS sende leere Antwort
- 21. So erhalten Sie vollständige Antwort für Groovy RestClient fehlgeschlagen Antwort
- 22. Was ist die Antwort im Erfolg: Funktion (Antwort) in Ajax
- 23. Keine Antwort oder sehr späte Antwort von Lighttpd
- 24. Wie Antwort Antwort Körper mit RxAndroid und Retrofit 2?
- 25. Es kann keine XML-Antwort mit "Newline" (für TwiML Antwort)
- 26. Python urllib2 urlopen Antwort
- 27. Express Logging Antwort Körper
- 28. Keine Antwort von XMLHttpRequest
- 29. Parsing ksoap2 Antwort
- 30. Verarbeitung der SOAP-Antwort
U, Apache Commons! Ich muss anfangen Apache Commons nicht zu vergessen !!! Ich werde es versuchen. – Trick
Es funktioniert :) – Trick
Würde es bei großen Daten funktionieren? Sie sollten den Header "Content-length" setzen, bevor Sie irgendwas in den outputStream der Antwort schreiben, so wie David notierte –