Первое, что я заметил - не имеет отношения к вашему актуальному вопросу, но вы должны закрыть входной поток в блоке finally
, чтобы убедиться, что он всегда выполняется.Обычно это просто обрабатывает исключения, но в вашем случае вы даже не закроете потоки файлов при возврате false
.
Помимо этого, почему сравнение с управляющими символами ISO?Это не «двоичный» файл, это «файл, который содержит 5 или более управляющих символов».На мой взгляд, лучший способ подойти к ситуации - инвертировать проверку - вместо этого напишите функцию isAsciiText
, которая утверждает, что все символы в файле (или в первых 500 байтах, если вы этого хотите) находятся в наборебайтов, которые известны исправно .
Теоретически, проверка только первых нескольких сотен байтов файла может привести к проблемам, если это будет своего рода составной файл (например, текст со встроенными изображениями).), но на практике я подозреваю, что каждый такой файл будет иметь двоичные данные заголовка в начале, так что вы, вероятно, в порядке.