Qual é a diferença entre InputStream e ByteArrayInputStream?

O código a seguir é extraído do capítulo java web start do volume java principal 1.

ByteArrayOutputStream out = new ByteArrayOutputStream(); PrintStream printOut = new PrintStream(out); printOut.print(panel.getText()); //panel.getText() return a String InputStream data = new ByteArrayInputStream(out.toByteArray()); FileSaveService service = (FileSaveService) ServiceManager .lookup("javax.jnlp.FileSaveService"); service.saveFileDialog(".", new String[] { "txt" }, data, "calc.txt"); 

Existem quatro objects criados, o stream é redirecionado três vezes. Existe algum outro método para gravar dados em um arquivo usando jnlp api? qual é a diferença entre InputStream e ByteArrayInputStream?

ByteArrayInputStream e ByteArrayOututStream são implementações na memory para serem usadas quando você deseja armazenar temporariamente os dados na memory de forma semelhante a um stream e, em seguida, bombeá-los novamente para outro local.

Por exemplo, vamos supor que você tenha um método que espere um stream de input como um parâmetro, por exemplo

 public Document parseXml(InputStream in) // build an XML document from data read in 

mas você quer enviar o conteúdo de dizer uma String para ele. Então você usaria um ByteArrayInputStream e o preencheria com o conteúdo de sua String e passaria o ByteArrayInputStream para o método.

Um exemplo de uso de ByteArrayOutputStream pode ser se um método gravar em um stream de saída, mas você só deseja capturar o resultado e obtê-lo diretamente.

InputStream é a interface comum para streams de input.
FileInputStream e ByteArrayInputStream implementam essa interface.

InputStream é uma class abstrata e todas as classs estendidas a partir dela representam um stream de input de bytes. As aplicações que precisam definir uma subclass de InputStream devem sempre fornecer um método que retorne o próximo byte de input. onde como um ByteArrayInputStream contém um buffer interno que contém bytes que podem ser lidos do stream. Um contador interno controla o próximo byte a ser fornecido pelo método de leitura.

Por causa do conceito de polymorphism você pode designar um filho para o pai como

 InputStream data = new ByteArrayInputStream(out.toByteArray()); 

então, se chamarmos de data.read (), isso significa que estamos chamando o método de leitura ByteArrayInputStream porque ByteArrayInputStream está fornecendo implementação de read (), em que o método InputStream read () é abstrato.

Intereting Posts