Я использую FileInputStream в потоке в Android java для чтения из файла последовательного интерфейса. stream.read (buffer), если нет данных, ожидающих прямо сейчас, если новые данные поступают снова, продолжается. Данные поступают время от времени, всякий раз, когда что-то приходит в поток, продолжает работать. Отлично!Android close FileInputStream
Но когда я хочу прекратить нить, кажется, я наткнулся на давно известную ошибку. thread.interrupt() не отменяет stream.read().
В этом вопросе есть много вопросов. Единственное, что должно работать, это закрыть базовый поток. Но если я закрою свой FileInputStream stream.read() в моем потоке приемника, все равно ждут. Он останавливается только после получения следующей группы данных - это, конечно, происходит неправильно.
Что еще я могу сделать, чтобы действительно закрыть или выключить FileInputStream?
Редактировать
После обсуждения моего решения выглядит так. Это не лучшая производительность и использование доступных(), которые не рекомендуется в документах, но это работает.
Нить, прислушивается к файлу:
byte[] buffer = new byte[1024];
while (!isInterrupted())
{
if (stream.available() == 0)
{
Thread.sleep(200);
continue;
}
// now read only executes if there is something to read, it will not block indefinitely.
// let's hope available() always returns > 0 if there is something to read.
int size = stream.read(buffer);
now do whatever you want with buffer, then repeat the while loop
}
Продолжительность сна является компромиссом между не зацикливанием всего времени и получать данные в приемлемом интервале. Mainthread завершает это с
stream.close(); // which has no effect to the thread but is clean
thread.interrupt();
Вы можете разместить этот блок кода? – user1506104
Тема: 'while (! IsInterrupted()) { int size = inputStream.read (buffer); . , , буфер процесса } ' Основная нить: inputStream.close(); – Droidum
'read' имеет IOException. вы захватили это? предоставить больше информации, указав больше вашего исходного кода. – user1506104