Весь текст содержит больше места, чем вы ожидаете увидеть в двоичном файле, а некоторые кодировки (UTF16 / 32) будут содержать множество нулей для обычных языков.
Небольшое решение было бы скрыть кровавые подробности в методе Standard / MultiByte-FileStream, вероятно, #isProbblyText был бы хорошим выбором.
По сути, это будет делать следующее:
- сохранить текущее состояние, если вы собираетесь использовать его позже, сбросить на старт (установить конвертер Latin1, если вы используете MultiByteStream)
Перебирать N следующих символов (где N - подходящее число)
Обнаружили непечатаемый символ ascii? Вероятно, это двоичный файл, поэтому верните false. (не специальный селектор, используйте карту, реализуйте новый метод для персонажа или чего-то еще)
При необходимости увеличьте 2 счетчика, один для пробельных символов, а другой для нулевых символов.
Если цикл завершается, вернуть, был ли считан какой-либо из счетчиков статистически значимой суммы
TLDR; Используйте метод, чтобы скрыть кровавые подробности, в противном случае это почти то же самое.