InputStream and OutputStream are the abstract classes at the base of the hierarchy
of Java classes that represent streams of 8-bit bytes.
FileInputStream takes a file name or File object and opens the file for reading.
FileOutputStream opens an existing file or creates a new one.
ByteArrayInputStream reads a byte array as if it were a file.
ByteArrayOutputStream can write an arbitrary sequence of data to a memory buffer
that automatically expands as needed.