Бесконечный цикл чтения входных потоков Java - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть вопрос о 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 голосов
/ 22 февраля 2012

xfis.avialable() возвращается 0. Когда вы пытаетесь читать в буфер нулевой длины, вы всегда добиваетесь успеха и получаете длину чтения 0, а не -1. Размеры буфера должны быть независимы от количества доступных байтов. Вы используете значение, возвращаемое xfis.read, чтобы определить, какая часть буфера была заполнена.

Попробуйте это:

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