ByteArrayInputStream para byte[]

Alguem sabe como posso criar um byte[] a partir de um ByteArrayInputStream?

err… o ByteArrayInputStream eh exatamente o contrario: vc passa um byte[] para ele e ele vai devolvendo os bytes dele…
acho que vc esta procurando o ByteArrayOutputStream, que tem um metodo chamado toByteArray()

Na verdade eu estou criando um método que recebe como parametro uma collection de stream (ByteArrayInputStream). No corpo do método é chamdo um outro método que recebe como parâmetro um byte[].

Será que é melhor definir a collection como só contendo ByteArrayOutputStream?

Pois eu entendo que ByteArrayInputStream seria para parametros de entrada e ByteArrayOutputStream para saída.

Nunca vi ninguém fazer isso que você está fazendo (usar um ByteArrayInputStream para entrada de dados).
Embora o nome engane, se você quiser usar uma Stream para entrada e saída, você tem de fazer exatamente ao contrário, já que a perspectiva é do “cliente” de seu método.

Vou mudar os parâmetros para byte[].

Você não é obrigado a mudar para byte[]. Vou dar um exemplo de um método que aceita uma InputStream e uma OutputStream para transformar, por exemplo, um texto para maiúsculas.

import java.io.*;

class TesteStream {
    public void converteParaMaiusculas (InputStream inp, OutputStream outp) throws IOException {
        byte[] bytes = new byte[1024];
        int nBytes;
        while ((nBytes = inp.read (bytes, 0, bytes.length)) &gt 0) {
            for (int i = 0; i &lt nBytes; ++i) {
                bytes[i] = (byte) Character.toUpperCase (bytes[i]);
            }
            outp.write (bytes, 0, nBytes);
        }
    }
    public static void main(String[] args) throws Exception {
        TesteStream t = new TesteStream();
        InputStream inp = new FileInputStream ("teste.txt");
        OutputStream outp = new FileOutputStream ("teste2.txt");
        t.converteParaMaiusculas(inp, outp);
        inp.close(); outp.close();
    }
}