What's the difference between InputStream and ByteArrayInputStream?

bytearrayinputstream, inputstream, java, jnlp

Solution

`ByteArrayInputStream` and `ByteArrayOututStream` are in-memory implementations for use when you want to temporarily store the data in memory in a stream-like fashion, then pump it out again somewhere else.

For example, let's assume you have a method that expects an input stream as a parameter, eg

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

but you want to send the contents of say a String to it. Then you'd use a `ByteArrayInputStream` and fill it with the contents of your String and pass the `ByteArrayInputStream` to the method.

An example of an `ByteArrayOutputStream` usage might be if a method writes to an output stream, but you just want to capture the result and get it directly.

Problem

The following code is extracted from the java web start chapter of the core java volume 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"); ``` There are four objects created ,the stream is redirected three times. Is there any other methods to write data to a file by using jnlp api? what's the difference between InputStream and ByteArrayInputStream?

Original source