O ViniGodoy me disponibilizou o metodo abaixo para ler um bytebuffer. Ma a minha dúvida é quando ou em que situações é aconselhável eu utilizar
throws *Exception e utilizar try +catch.
pois se eu colocar um try catch no código abaixo quando meu programa se encera o processamento da máquina vai a 100% e quando volto a utilizar throws IOException o programa executa normalmente.
Alguém teria algum documento explicando de quando utilizar try catch e throws IOException???
Bem sua questão está em torno da regra do que chamamos de handel or declare.
na verdade essa operação de leitura de bytes é caracterizada como de risco, por isso ela lança uma exception do tipo IOException (Exception verificada).
Sendo assim vc é obrigado a declarar na assinatura do método que vc vai lançar essa Exception( passar a vez para quem chamou esse método) ou tratar a exception utilizando um bloco try catch.
Eu prefiro tratar a exception pois mais cedo ou mais tarde vc vai ter que capturar mesmo a exception ou seu programa pode fechar, causando um transtorno ao usuario.
Nesse caso utilize um bloco try catch:
A regra é sempre capturar as exceptions verificadas antes que cause um dano maior no sistema.
Quanto mais específica for o tipo da exception capturada, melhor fica sua aplicação, e menos recursos são utilizados pelo seu sistema.
Meu ponto de vista é esse, espero que sirva de ajuda.
Mas você tem que pensar assim. Se uma exception de I/O for disparada no meio do blockread, o que significa? Provalmente que o socket fechou, e que o canal não está mais disponível.
O blockread roda num loop. Uma exception dessa deveria parar o loop. Se você põe um try catch aí dentro, o seu loop vai tentar o tempo ler um canal indisponível, e vai ficar ininterruptamente procurando por um dado que nunca mais chegará lá. O canal avisa isso por uma exception, mas seu try catch a captura e ignora, o que faz a leitura ocorrer novamente.