Existe alguma forma de reconhecer atráves de um fluxo de bytes se esse arquivo é texto ?
Estou recebendo via upload num componente seam que transforma esse arquivo que é texto em bytes.
Mas a validação de extensão que estou fazendo não é efetiva, pelo fato de ser facilmente driblável ao mudar a extensão para o .txt.
Como posso saber se um arquivo é txt tendo apenas seu fluxo de bytes ?
Textos são bytes. A única coisa que muda, é que textos usam um conjunto relativamente pequeno de valores, que representam as letras, números e demais algarismos legíveis.
A forma mais fácil é testar por bytes que geralmente não são encontrados em arquivos de textos, como os valores 00 ou valores ascii que não representam caracteres.
Além disso, você pode procurar por palavras ou expressões comuns no fluxo, desde que você saiba de que língua pode ser o texto.
Mas não sei se há uma maneira 100% garantida de testar se um fluxo de bytes é somente composto por texto ou não.