Pegar uma quantidade variavel de bytes em um arquivo binário em java?
7 respostas
java
M
mmrosa
Pessoal, como faço para pegar uma quantidade variavel de bytes em um arquivo binário em java?
Tem um arquivo binario desse modo -> int int String . O segundo inteiro me diz a quantidade de bytes que devo ler para pegar a string completa. O código abaixo pega perfeitamente os dois inteiros mas ñ sei como faço para pegar agora string, ñ achei nenhum método dessa classe random acess file que me permita passar a quantidade de bytes que quero ler. Lembrando que no java cada char possui 2 bytes, então o tamanho da string(array de char) convertida em bytes será multiplicado por 2. (faço conversão de string para char e char para array de bytes na criação do arquivo em outro código)
ex: 54 6 pai
System.out.println(r1.readInt());// retorna 54System.out.println(r1.readInt());// retorna 6 tamanho em bytes da string "pai"publicclassteste2{publicstaticvoidmain(String[]args)throwsIOException{RandomAccessFiler1=newRandomAccessFile("teste.bin","r");System.out.println(r1.readInt());System.out.println(r1.readInt());}}
Existem varias formas de obter o conteúdo, caso você desejar podera’ criar um loop e pegar isso de forma variavel.
Bons codigos
M
mmrosa
Muito obrigada j-menezes por compartillhar seu conhecimento! Olha, colocar String frase = new String(contem); não funfou aqui pra mim, ele ñ ta imprimimdo a string depois e tbm não dá nenhum erro.
publicstaticvoidmain(String[]args){try{// aqui ele vai criar o arquivo binario teste2.bin // ***************************************************RandomAccessFiler1=newRandomAccessFile("teste2.bin","rw");r1.writeInt(54);r1.writeInt(5);r1.writeBytes("jorge");r1.writeInt(80);r1.writeInt(7);r1.writeBytes("menezes");r1.close();
// *** aqui ele vai ler o conteudo do teste2.bin// *****************************************************r1=newRandomAccessFile(“teste2.bin”,“r”);intprimeiro=r1.readInt();intsegundo=r1.readInt();
Em qualquer IDE ou direto funciona legal, bom… eu gosto do NetBeans.
Bons Codigos
M
mmrosa
j-menezes resolvi aqui fazendo isso String frase = new String(contem,“UTF-16”); Obrigada cara vlw mesmo! To usando o eclipse neon no ubuntu não sei se muda alguma coisa. Bons estudos!
P
peczenyj
vc sabe o que isso faz, que mal pergunte?
M
mmrosa
Pelo que entendi na documentação java , esse “UTF-16” diz para o java que tipo de codificação que ele deve fazer, neste caso UTF-16 é um tipo de codificação de caracteres que utiliza 16 bits para representação e o “contem” é um array de bytes da string. O que a linha faz é pegar um array de bytes e criar uma string a partir deste array de bytes.
otimo. perguntei pq tem gente q acerta codigo na força bruta e depois não entende o motivo de alguns comportamentos.
a maneira pelo qual se estima o tamanho de uma string em utf-8 e utf-16 é diferente. vc pode ter 5 code points ou “letras” mas isso pode ocupar 5 ou 6 ou 10 bytes em utf-8, mas utf-16 é fixo. por outro lado vc tem bytes “inuteis”