これで、サーバがヘッダのテキスト行数を含むデータストリームを送信しているソケットInputStream
をバイナリで送信しています送信しているpdfファイルを構成するバイトのストリーム(ヘッダセクションで指定された長さの)私は制御できないサーバーはデータを送信した後でデータストリームを閉じないので、ストリームから正確なバイト量を読み込み、クライアント側からそれを閉じる必要があります。テキストヘッダを含むソケット入力ストリームからバイナリファイルを読み取るにはどうすればいいですか?
私の質問は、ヘッダー(テキスト)を読みやすくして、同じ入力ストリームから正確な量のバイトを読み込むためのユーティリティはどうやっていますか?
私はさまざまなヘッダーに適したクラスを試しましたが、データのバイナリコンテンツ(バイトではない文字でのReader
の作業)にはそれほど大きくはなかったことが分かっています。ストリームはオープン/非終了のままで、IOUtils.toBytes(inputStream)
での試行は無期限にハングアップするため、ApacheのコモンIOUtils
などのユーティリティは動作しません。
解決策は、Reader
クラスではなく、Stream
クラスで動作するように思われますが、これは私にこれを手助けするユーティリティがなければならないほど低レベルのようです。 DataInputStream
を使ってバイナリデータを読むのは簡単だと思われますが、ヘッダーの読み方は分かりません。何かアドバイス?
EDIT:
http/1.0 200 OK
content-type: application/doc_request
content-length: 18813
session-id: slukdcy71292645678312
remote-addr: slukdcy7
<pdf binary data...>
ヘッダとバイナリデータとの間の新しいラインは、ヘッダの終わりとバイナリデータの開始を決定する:ここでサンプルメッセージです。
@Peter Lawreyのおかげで、私は、私は、ヘッダーを読むまで、私は知らないバイナリデータを除いて、そこにあるどのくらいかわからないので、そのハードのthatsビット「すべてのデータの読み取り」を。バイナリデータの最後を読み取ると、ソケットがオープン/ターミネータされていないため、ハングします。 –
コンテンツがどこにあるのかを判断できる必要があります。例えばhttpヘッダーの末尾に空白行があるのか、ヘッダーにデータの長さが含まれていますか?サンプルヘッダーの外観を投稿できますか? –
あなたはサーバーを制御できないかもしれませんが、送信したメッセージのデコード方法を尋ねることはできますか?つまり、ヘッダーとファイルの末尾がどこにあるかをどのように知っていると思いますか?あなたが推測していることを知らずに、データのフォーマットに依存します。 –