Estou gravando um arquivo manipulando bits para um trabalho sobre Huffman. Só que estou tento um problema ao gravar/ler o arquivo. Fiz alguns testes e está dando um problema. Não sei se é na leitura ou na escrita. Olha esse código:
File f = new File("teste.txt");
BufferedWriter writer = new BufferedWriter(new FileWriter(f));
int i = 600;
writer.write(i);
writer.close();
BufferedReader reader = new BufferedReader(new FileReader(f));
int r;
r = reader.read();
System.out.println(r);
reader.close();
O resultado é 63. Para qualquer valor acima de 255 ele “printa” 63. Fica parecendo que ele só grava 1 byte, enquanto que pela documentação do java fala que ele grava o char ou seja 2 bytes.
Alguem sabe onde estou errando?
Obrigado
Fiz mais alguns testes e parece que só grava 1 byte mesmo. Que tosco. Alguem sabe como eu gravo o char completo?
As classes FileReader e FileWriter são usadas para trabalhar com arquivos de texto.
Para trabar diretamente com os bytes de um arquivo, vc pode usar as classes FileOutputStream (escrita) e FileInputStream (leitura).
[]´s
Ah, outra coisa. Um byte são 8 bits certo? Então o intervalo de representação de um byte em decimal é de 0 a 255.
[]´s
Valeu. Vou testar essas classes. O grande problema que eu achei foi porque a interface dessas classes pedem um int que é 32bits, daí eu manipulei os dados dentro do int. Só que o programa não funcionou, então procurei na documentação do método write e estava escrito: “Write a single character. The character to be written is contained in the 16 low-order bits of the given integer value; the 16 high-order bits are ignored.”. Então converti para caber em 16-bit e continuou não funcionando. Agora fui procurar no Java Tutorials e olha só: “The Java platform stores character values using Unicode conventions. Character stream I/O automatically translates this internal format to and from the local character set. In Western locales, the local character set is usually an 8-bit superset of ASCII.” É por isso que só grava 8 bits :?