2011-02-05 9 views
2

まず、私はこれが学校プロジェクトだと認めますので、実際のコードではなく方向性の詳細が必要です。また、私はjava.net.HTTPURLConnectionクラスとjava.net.URLクラスを使用して手助けをすることはできません。JavaでHTTPメッセージを読む

Ok ... JavaでHTTPサーバーを作成していますが、HTTPメッセージの読み込みに問題があります。私は、すでに動作している永続的な接続(HTTP/1.1とConnection:closeを使用しない場合)を許可する必要があります。しかし、永続性のために、複数の要求がパイプラインを下ってくる可能性があります。

私は、メッセージ本文の長さをバイト単位で判断するためにContent-Lengthヘッダーを使用できます。その後、次のメッセージがパイプに表示されます。

私の質問...

  • は、私は、charのバイトまたはcharでメッセージバイトで読むべきか、私は行ずつで読むことができますか?
  • メッセージ本体をバイト形式で保存するか、String ok(HTMLは問題ないとは思いますが、画像などは改行する必要があります。文字列?)
  • 私は行単位で読むことができるスキャナがありますか?次に、メッセージ本体にヒットしたときにgetBytes(contentLength)を呼び出すと、それは私に体を与えますか?

もう一度おねがいします!

編集:チャンクデータまたは圧縮データをサポートする必要はありません。

答えて

2

バイト配列に読み込むことをお勧めします。 (バイト[])が実際に読み込まれたバイト数を返し、あなたはまだ呼び出す必要があるかもしれないことに注意してください。数回)。

チャンクエンコーディングにも注意してください。ただし、私はいつもコーディングクライアントを気にしていたので、サーバーがこれをサポートしなければならないかどうかはわかりません。

+0

ポストに感謝します。私は他人が何を言わなければならないかを見るでしょう。私はちょうどチャンクされたエンコードについて心配する必要はないことに注意するように変更しました(言及するのを忘れてしまった)。 – mikesir87

+0

Ok ...どのようなヘッダーもまだ解析できなかった場合、どのくらいの長さのコンテンツがあるのか​​分かりますか? – mikesir87

+0

@ mikesir87:まあ、良い点;-)。この時点で、あなたは本当に行を読む必要があります。最も簡単な方法は、ヘッダーセクションを終了するシーケンス '\ r'、 '\ n'、 '\ r'、\ 'n'を認識するまで、文字を読み取ることです。これまで、すべての文字をStringBufferに追加しました。その後、ヘッダーがあり、バイト配列を解析して読み続けることができます。この方法はパフォーマンスにはあまり適していませんが、実装は簡単です。 – yankee

1

2番目のヤンキーの意見 - 下位レベルでは、バイト配列を読み込む必要があります。これにより、htmlと画像の両方で作業することができます。より高いレベルでは、htmlファイルを特定のエンコーディングで文字列に変換できます。より低いレベルではなく、より高いレベルでエンコーディングを選択する方がよいでしょう。

バッファを使用し、毎回新しいバイトでバッファを埋めます。ヤンキーは言ったように、readメソッドへの呼び出しを繰り返し、戻り値をチェックする必要があります。

+0

読書に使用することをお勧めするクラスはありますか? – mikesir87

関連する問題