2009-07-01 16 views
0

イメージファイルをクライアントに送信するサーバープログラムを作成しました。 イメージが512バイトの場合、私のプログラムは正常に動作します。しかし、大容量のファイルではうまく動作しません。ソケットチャネルを使用してネットワーク経由でイメージファイルを送信する方法

この場合、私は取得するはずの正確なイメージを取得していません。私の回復したイメージが不適切な方法であることを意味します。だからこの問題を解決する方法

私はクライアント側のシンプルなソケットの間にサーバーでjavaソケットチャネルとjava nioを使用しています。

おかげ スニル

答えて

1

ここにあなたのバグです:

while(fileChannel.read(buffer)>0) 

read()方法は、必ずしもバッファを満たすません。任意のバイト数を読み取り、その数を返します。あなたはそれがバッファの容量よりも少ない読み込みをし、その多くのバイトだけを書き込むことを許さなければなりません。なぜなら、ファイルサイズは必ずしもあなたのバッファサイズの倍数ではなく、 。

クライアント側でも同じことが言えます - available()はここでは役に立ちません。単純に読み込んだ後に処理しなければならないバイト数です。

0

クライアント側で出力ストリームをフラッシュして閉じることはありません。あなたが脱出するときには、出力ストリームを閉じて()、キャッシュされたデータがファイルに書き出されます。

関連する問題