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)) > 0) {
for (int i = 0; i < 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();
}
}