PrintWriter e ByteArrayInputStream

Dado que eu tenho um objeto do tipo PrintWriter como posso transformalo em um ByteArrayInputStream?

Acho que só lendo tudo pelo PrintWriter e jogando tudo depois no ByteArrayInputStream.

Mas eu não consigo fazer uma iteração sobre o PrintWriter. Como posse le-lo?

O problema é o seguinte, eu tenho um objeto PrintWriter e preciso tranforma-lo em um ByteArrayInputStream. Como é que eu faço isso, pois não tenho muita experiência com esta parte do java?

Ops, confundí.

O problema é que PrintWriter é uma saída de dados e o ByteArrayInputStream é uma entrada de dados.

Mas que diabos quer fazer?

Tenho um metodo que me devolve um objeto do tipo PrintWriter, só que preciso de um fluxo de bytes para criar um Blob. Então tenho que obter estes bytes de alguma forma.

Mas isso que você está dizendo é meio incompatível, pois é o mesmo que tentar ligar uma tomada em outra tomada, quando na verdade teria que ligar um plug em uma tomada.

Alguma sugestã"? Posso mudar o método para me retornar um outro objeto. Parte do codigo é mostrado abaixo:

java.io.OutputStream out = new java.io.FileOutputStream( aFilename); //UTF8
PrintWriter pw = new PrintWriter( new java.io.OutputStreamWriter( out, fileencoding ));
pw.println(String);
pw.close()
out.close();

Alguma sugestão com base no código acima?

Essa código acima, pelo que ví, grava uma String num arquivo, por meio de um PrintWriter. Nada demais!

Se você me explicar o que quer fazer, talvez eu possa te ajudar. Não sou advinho.

Na verdade eu tenho vários pw.println(); que grava um arquivo XML. Preciso gravar este arquivo XML no banco de dados. Logo estou tentando usar o Blob que aceita um Stream, preciso fazer deste arquivo xml um array de bytes.

Então abra o XML, leia-o e grave-o no banco.

Ou o XML é criado “on-the-fly”?

Se sim, pq usar o PrintWriter? Pq não jogar diretamente no ByteArrayInputStream?

Como havia dito não tenho experiência com esta parte do java. O XML é criado “on-the-fly”. Vou tentar usar ByteArrayInputStream. Na especificação ele recebe um byte[] então terei que fazer das strings um byte?

Então pare de usar a inexperiência e vamos fazer algo mais bonito.

Responda-me: Você SÓ usa o PrintWriter para criar o XML em disco? Se sim, vamos eliminá-lo.

Olha o que eu fiz uma vez:

bytes[] b = leBytesDeAlgumLugar(); ByteArrayInputStream bis = new ByteArrayInputStream( b ); salvaOsBytesEmAlgumLugar( bis );

Sim só para colocar em disco.

Por exemplo tenho pw.print("<?xml version=“1.0"”); terei que transformar esta string em byte?

byte[] b = "<?xml version=\"1.0\"".getBytes();

isso incrementando o indice do vetor correto? Pois são várias strings.

Esquece e gravação do XML no disco (a não ser que precise disto). Já que me parece que você quer gerar um XML e gravá-lo no banco, então esqueça do disco e do PrintWriter.

E você pega os bytes das Strings que usaria para montar seu XML e vai jogando dentro do ByteArrayInputStream.

Falou?

Falô cara.

Ficara assim com várias repetições:

byte[] xmlByte;

xmlByte = “<?xml version=“1.0"”.getBytes();
xmlByte = (” encoding=""+ encoding +"" “).getBytes();
xmlByte = " ?>”.getBytes();
.
.
.
.
ByteArrayInputStream in = new ByteArrayInputStream(xmlByte);

É isso?

Nao, nao eh isso. Bytes e Strings nao se misturam a menos que vc saiba o que esta fazendo com os encodings, e mesmo assim nao eh soh atribuir uma coisa na outra.

De uma lida no javadoc da ByteArrayOutputStream :wink:

Mas eu estou trabalhando com o ByteArrayInputStream e não ByteArrayOutputStream?