私はさまざまな方法でストリームを出力しています。閉じる前に、出力ストリームのコンテンツの長さを調べるにはどうすればよいですか?出力ストリームのコンテンツ長を返信しますか?
答えて
最も簡単な方法は、おそらく、すべての書き込み要求を転送するが、内部カウンタを保持する別のOutputStream
実装にそれをラップすることです。それでは、代わりにそれを書くだけです。実装するにはあまりにも難しいはずはありません。実際にはすでに実装されている可能性があります。
編集:わかりやすい名前(CountingOutputStream
)で推測すると、Apache Commons IOという実装が登場しました。
EDIT:これはHTTP用で、クライアントが完全なデータのバッファリングをまだ行っていない場合(この場合、はコンテンツの長さになります)、 を書く必要があるために、データを書き込む前にの問題があります。場合によっては、特定のサイズ(クライアントがバッファリングする)まで動作して失敗することがあります。その場合、デイビッドの解決策が適切になるでしょう。
独自のByteArrayOutputStreamに書き込んで、最後にレスポンス出力ストリームに書き出すことを検討することもできます。
しかし、バイト[]のすべてのバイトがJVMのメモリの1バイトを食べるので、これは非常にメモリホギングになります。 – BalusC
出力ストリームにデータを書き込む前に、レスポンスヘッダーにコンテンツの長さを設定する必要があります。したがって、あなたのオプションは以下の通りです:
- ByteOutputStreamを使用してデータをバイト[]配列に書き込み、データのサイズを取得したらレスポンス出力ストリームにコピーします。しかし、大きなファイルを作成する場合、これは明らかにオプションではありません。
- 一時ファイルにデータを書き込み、ファイルサイズを取得したらレスポンス出力にコピーします。あなたがやっていることに応じて、これは容認できないパフォーマンスのペナルティを持つかもしれません。
- 最初にデータを生成するのがどれほど高価なのかに応じて、それを一度生成してそれを放棄してカウントを取得し、再度生成することができます。これが現実的な解決策であるとは思わない。
- レスポンスヘッダーでコンテンツの長さを報告できないという事実に気をつけてください。
- 1. Javaはスタックトレースを別の出力ストリームに送信します
- 2. PythonInterpreter exec関数が空の出力ストリームを返します
- 3. ストリームのコンテンツの長さを取得
- 4. Blobストレージ入力はストリーム分析でnullを返します。ジョブ出力クエリ
- 5. カフカ出力ストリーム
- 6. cURL GETリクエストは返信なし出力
- 7. [iPhone]:ワイヤレスネットワーク経由で出力ストリームを送信する方法は?
- 8. 入出力ストリーム:ストリームの終わり?
- 9. 出力ストリームを使用してコマンドを送信できません
- 10. Android Bluetooth入力/出力ストリーム:送信済み〜1400バイト、受信済み1008
- 11. TensorFlow:各繰り返しの出力値を出力します。
- 12. C++出力ストリームを入力ストリームに接続する
- 13. YoutubeコンテンツID APIは常に返されます。返信なし
- 14. C++の入出力ストリーム
- 15. Java EEの入出力ストリーム
- 16. Java Piped入出力ストリーム通信の大規模な遅延
- 17. Javaソケット/出力ストリーム書き込み:ブロックしますか?
- 18. WCFサービスからのストリーム出力
- 19. ファイルパスからのJava入出力ストリーム
- 20. 出力長と同じ入力長でQRCodeペイロードを暗号化します
- 21. SimpleXMLはCDATA要素のコンテンツを返信し続けます
- 22. HTTPサーバーが出力ストリームの最後の文字を送信しない
- 23. Javaの入力ストリームが出力ストリームより速い
- 24. コンテンツの長さを確認します
- 25. ImageResizerの出力ストリームのコンテンツのハッシュが期待どおりでない
- 26. PydubとAplay:冗長出力を抑制しますか?
- 27. のHttpURLConnectionをコンテンツの長さは-1を返しアンドロイド4.0
- 28. XmlWriterを使用して、Powershell出力ストリームを行単位で入力します。
- 29. `cmake --verbose = 1`は冗長cmake出力を出力しますが、` cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL = ON`は出力しません。
- 30. 動作時に出力ストリーム
U、Apache Commons!私はApache Commonsについて忘れないようにしなければならない!試してみます。 – Trick
それは働いています:) – Trick
大きなデータで動作しますか?デビッドが指摘したように、レスポンスのoutputStreamに何かを書く前に、 "Content-length"ヘッダを設定する必要があります。 –