Pessoal, realmente fiquei ate com medo depois que vi esse problema. Eu vou fazer um codigo de exemplo aqui e queria ver a forma mais correta e facil de corrigir esse problema.
Eu tenho um pequeno problema que é o encoding, pois ta gravando valores q n tem nada a ver no meu ByteArrayOutputStream, que é um arquivo;
Sei que devo mudar o encoding para ISO-8859-1, mas qual a forma mais correta? Vou ter q utilizar String??
Quais são os valores que não têm nada a ver? Parece que está tudo OK.
(Como é que você copia o ByteArrayOutputStream para o tal arquivo, hein? O problema deve estar lá.)
homisinho
Ola thigol, obrigado pela prontidão na resposta!
mas realmente o problema esta ate no meu vetor de bytes…
e depois é claro na hora de passar ele para o meu ByteArrayOutputStream…
Depure o programa e veja que os valores dentro do array n são 128,144 e 160…
T
thingol
Uai, mas esse é o valor esperado. Em hexadecimal, esses valores (128, 144 e 160) são, respectivamente, 0x80, 0x90 e 0xA0.
O que você esperava?
homisinho
ByteArrayOutputStreamout=newByteArrayOutputStream();////cria dados do arquivo....byte[]array=newbyte[200];array[0]=(byte)TrabWords.getHI(equip.getvalor1());array[1]=(byte)TrabWords.getLOW(equip.getvalor2());array[2]=(byte)TrabWords.getHI(equip.getvalor3());array[3]=(byte)TrabWords.getLOW(equip.getvalor4());array[79]=(byte)TrabWords.getLOW(equip.getvalor5());array[100]=(char)13;array[101]=(char)10;out.write(array);for(Iterator<C>it=cx.iterator();it.hasNext();){Cca=it.next();i=(ca.getNumero()*16)+objeto.getValor();//1,2,3 ..funciona 144 n funciona...out.write(0);out.write(i);out.write(objeto.getValor1());out.write(objeto.getValor2());out.write(objeto.getValor3());..}FileOutputStreamo=newFileOutputStream(file);StringfileContent=newString(out.toByteArray());o.write(fileContent.getBytes());o.flush();o.close();
Eu tenho problemas somente quando vou colocar algum valor como por exemplo 144.
sei que o problema esta no encoding. Mas n sei como Resolver?
T
thingol
Troque
StringfileContent=newString(out.toByteArray());
por (não se esqueça de pôr os “try/catch” adequados):
Pois é thingol tentei o codigo que vc me passou mas n adiantou onde deveria estar 128 no arquivo possuia 63…
todos os outros valores estavam ok… menos os valores 128, 144 e alguns outros…
homisinho
Fiz um novo teste usando FileWriter:
// o true significa q o arquivo será constante
FileWriter x = new FileWriter(Configuracao.getCaminhoserv() +"rararo.txt",true);
x.write(8); // armazena o texto no objeto x, que aponta para o arquivo
x.write(9); // armazena o texto no objeto x, que aponta para o arquivo
x.write(144); // armazena o texto no objeto x, que aponta para o arquivo
x.write(8); // armazena o texto no objeto x, que aponta para o arquivo
x.close(); // cria o arquivo
JOptionPane.showMessageDialog(null,"Arquivo gravado com sucesso","Concluído",JOptionPane.INFORMATION_MESSAGE);
Deu o mesmo erro, n tenho nenhuma dúvida q a forma de resolver isso é bem simples, mas n estou encontrando!!!
T
thingol
Não use FileWriter para gravar bytes. Use FileOutputStream, que não deve ter tal problema com encodings. OK?