Я читаю файл через apache.commons.FtpClient.Каков наилучший способ контроля InputStream?
Это отлично работает 99,9% времени, но иногда это просто умирает в методе чтения() ...
InputStream inStream = ftp.retrieveFileStream(path + file.getName());
String fileAsString = "";
if(inStream == null){
return;
}
while((c = inStream.read()) != -1){ //this is where the code sometimes just hangs
fileAsString += Character.valueOf((char)c);
}
Мой вопрос: что является самым надежным способом защиты от этого запирание системы на неопределенный срок. Должен ли я настраивать таймер в отдельном потоке? Или есть более простой способ сделать это?
Мне нравится это решение, хотя я подозреваю, что все еще есть шанс, что между проверкой доступных и read() соединение может как-то устаревать ... Я понимаю, что это очень маловероятно, но это может произойти, правильно? –
Если у вас есть медленное соединение, доступное() вернет 0 либо в начале файла, либо каким-то образом до конца. –
Если в FtpClient нет ничего плохого, это не может быть реальным решением. read() следует блокировать, только если доступно() возвращает 0, поэтому вместо ожидания в read() вы будете ждать в этом цикле и потреблять намного больше CPU. –