私のアプリでは、ソケットを使用してクライアントからファイルを送信しています。もう一方の側では、別のクライアントがInputStreamを使用してファイルを受信し、次にbufferedOutputStreamがファイルをシステムに保存します。ファイルの読み込み時にInputStream.read()がハングアップする
なぜ、ファイルが完全に転送されていないのかわかりません。私はこれがネットワークの過負荷のためだと思う、とにかく、私はそれを解決する方法を知らない。
送信機は、次のとおりです。
Log.d(TAG,"Reading...");
bufferedInputStream.read(byteArrayFile, 0, byteArrayFile.length);
Log.d(TAG, "Sending...");
bufferedOutputStream.write(byteArrayFile,0,byteArrayFile.length);
bufferedOutputStream.flush();
レシーバーは次のとおりです。
bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(file));
byteArray=new byte[fileSize];
int currentOffset = 0;
bytesReaded = bufferedInputStream.read(byteArray,0,byteArray.length);
currentOffset=bytesReaded;
do {
bytesReaded = bufferedInputStream.read(byteArray, currentOffset, (byteArray.length-currentOffset));
if(bytesReaded >= 0){ currentOffset += bytesLeidos;
}
} while(bytesReaded > -1 && currentOffset!=fileSize);
bufferedOutputStream.write(byteArray,0,currentOffset);
bytesReadedの値をログに記録し、どのように進んでいるかを確認してください。 – AdamSkywalker
通常、デバッガをステップ実行し、変数値を調べることをお勧めします。 –
私はこれまでにやったことがあります。たとえば、ファイルに10000バイトがある場合、9000バイトを受信したときにスタックされます。 –