2012-02-22 36 views
0

javaのInputStreamに関する質問があります。Javaの入力ストリームを読み取る無限ループ

私は以下のようにファイルからデータを読んでいます:

FileInputStream xfis = new FileInputStream('filename') 

int size = xfis.avaliable(); 
int len = 0 ; 
byte[] buffer new byte[size]; 

while((len = xfis.read(buffer) > -1) 
(
    // process some logic 
) 

xfis.close(); 
.... 

そしてまた、バッチプログラムに毎分を実行している:両方のプログラムを同時に読み取りと書き込みのとき

FileOutputStream fos = new FileOutputStream('filename') 
FileLock flock = fos.getChannel().tryLock(); 

if(flock != null){ 
    fos.write() 
    flock.release(); 
} 

fos.close(); 
... 

プログラムいますファイルが無限ループでスタックするのを読み取ります。

どうすれば問題を解決できますか?

おかげ

+1

はこれを試してみてください。書き込みはちょうどいくつかの書き込みを行い、次に停止するつもりですか? –

+0

while((len = xfis.read(buffer)> 0)...? –

+0

読み込みのときではなく書き込み時にロックするように見えます。読み込む前にロックを取得して、2つのプロセスを持たないようにしてください同じファイルで同時に作業している人(排他的なアクセス権を持っていると思う人) – yoozer8

答えて

0

xfis.avialable()0を返しています。長さゼロのバッファーを読み取ろうとすると、常に成功し、0の読み取り長さを受け取りますが、-1ではなくなります。バッファサイズは、使用可能なバイト数とは無関係にする必要があります。 xfis.readによって返された値を使用して、バッファの量を決定します。読み取りが無限ループになりますなぜ私はよく分からない

byte[] buffer = new byte[Math.max(1, size)]; 
+0

助けてくれてありがとう。助けてくれないと、今日は夜間仕事をする^^ – user1110977

関連する問題