Supongo que quiere decir que 'usar' significa leer, pero lo que explicaré para el caso de lectura se puede revertir básicamente para el caso de escritura.
entonces terminas con un byte []. Esto podría representar cualquier tipo de datos que puedan necesitar tipos especiales de conversiones (caracteres, cifrados, etc.). Supongamos que desea escribir estos datos tal como están en un archivo.
En primer lugar, podría crear un ByteArrayInputStream que es básicamente un mecanismo para suministrar los bytes a algo en secuencia.
entonces podría crear un FileOutputStream para el archivo que desea crear. Existen muchos tipos de InputStreams y OutputStreams para diferentes fuentes de datos y destinos.
Por último, escribiría InputStream en OutputStream. en este caso, la matriz de bytes se enviaría en secuencia a FileOutputStream para su escritura. Para esto recomiendo usar IOUtils
byte[] bytes = ...;//
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
FileOutputStream out = new FileOutputStream(new File(...));
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
y a la inversa
FileInputStream in = new FileInputStream(new File(...));
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
byte[] bytes = out.toByteArray();
si usa los fragmentos de código anteriores, deberá manejar las excepciones y le recomiendo que haga los 'cierres' en un bloque finalmente.