Duvidas com o pacote java.io

Fala pessoal,

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 ?

InputStream leitor1 = System.in; System.out.println(leitor1.read());

InputStreamReader leitor2 = new InputStreamReader(System.in); System.out.println(leitor2.read());

Ninguém ? :roll:

[quote=davivcgarcia]Fala pessoal,

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.

http://www.guj.com.br/posts/list/71511.java