Apesar de ser novo no fórum, tive a oportunidade de conhecer o Java durante o segundo período do meu curso de graduação. Recentemente decidi aprender Java EE e resolvi relembrar um pouco do Java SE que eu já tinha aprendido. Mas me surgiram algumas dúvidas quanto as classes do pacote java.io durante um dos meus estudos com sockets:
1) Quando preciso ler/escrever de/em um InpuStream/OutputStream, eu uso a chamada mais clássica, passando de InputStream > InputStreamReader -> BufferedReader, conforme abaixo. Então, qual a diferença (além da trivial de que escrevo menos) com a segunda chamada abaixo ?
BufferedReader bufferEntrada = new BufferedReader(new InputStreamReader(socketCliente.getInputStream()));
BufferedWriter bufferSaida = new BufferedWriter(new OutputStreamWriter(socketCliente.getOutputStream()));
PrintWriter escritor = new PrintWriter(socketCliente.getOutputStream());
Scanner leitor = new Scanner(socketCliente.getInputStream());
2) Qual a diferença entre usar InputStream e InputStreamReader, já que ambas as chamadas abaixo retornam o mesmo valor ?
Apesar de ser novo no fórum, tive a oportunidade de conhecer o Java durante o segundo período do meu curso de graduação. Recentemente decidi aprender Java EE e resolvi relembrar um pouco do Java SE que eu já tinha aprendido. Mas me surgiram algumas dúvidas quanto as classes do pacote java.io durante um dos meus estudos com sockets:
1) Quando preciso ler/escrever de/em um InpuStream/OutputStream, eu uso a chamada mais clássica, passando de InputStream > InputStreamReader -> BufferedReader, conforme abaixo. Então, qual a diferença (além da trivial de que escrevo menos) com a segunda chamada abaixo ?
BufferedReader bufferEntrada = new BufferedReader(new InputStreamReader(socketCliente.getInputStream()));
BufferedWriter bufferSaida = new BufferedWriter(new OutputStreamWriter(socketCliente.getOutputStream()));
PrintWriter escritor = new PrintWriter(socketCliente.getOutputStream());
Scanner leitor = new Scanner(socketCliente.getInputStream());
[/quote]
Para leitura de textos prefira a segunda forma, pois usa uma API mais aprimorada e de mais alto nível - em outras palavras, facilita seu trabalho, principalmente quando você precisa fazer algo mais complexo (como trabalhar com expressões regulares).
Nesse caso, nenhuma. O uso do InputStreamReader pode ser viável quando se precisa trabalhar com métodos que só aceitam Reader’s e não InputStream’s.