Alguém pode me ajudar com a leitura de um arquivo binário?? Bom, eu comecei a fazer a leitura de um binário…no entanto estou fazendo linha a linha e como é um binário a leitura do mesmo deve ser byte a byte?? Alguém pode me ajudar??
Veja meu código como está:
import java.io.*;
import java.util.Scanner;
public class read_file
{
public static void main( String[] args ){
int matriz [][][][] = new int [4][16][16][15];
try
{
Scanner scanner = new Scanner(new BufferedInputStream(
new FileInputStream("C:/data.bin")));
while(scanner.hasNextLine()){
String linha = scanner.nextLine();
System.out.println(scanner.next());
//System.out.println(linha);
}
/*for(int i=0; i<matriz.length; i++){
for(int j=0; j<matriz.length; j++){
matriz[i][j]=1;
System.out.print(matriz[0][j]);
}
System.out.println(matriz[i][0]);
} */
}catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Como assim? É que assim eu li dois arquivos usando o IDL e removi alguns valores desses arquivos e transformei em um unico arquivo binário.
Não sei se interessa mais o meu IDL q realiza a conversão dos arquivos em binário é o q segue: http://pastebin.com/qyrTt41s
OBS: (precisei usar o IDL por causa do projeto)
Se vc não sabe como os dados estão dispostos lá dentro, fica difícil fazer a leitura.
Por exemplo, vc tem um arquivo de texto assim:
120930928029380198320198321390823
Onde os 4 primeiros dígitos são de um int, os 2 dígitos seguintes são um outro int, os 8 seguintes são outro, e o resto é uma única String, com a descrição de um produto.
Se eu não souber quantos dígitos cada int tem, e que pedaço do dado é o que, não tenho como ler esse arquivo, mesmo sendo de texto.
Com o arquivo binário é a mesma coisa. Cada conjunto de bytes dentro dele representa um pedaço da informação. Ou vc sabe que pedaço é o que, ou vc não faz a leitura.
No caso os arquivos lido são matrizes e o binário pelo comando do IDL vi q esta assim:
Bom, o IDL possui um comando - o writeU, esse comando escreve os dados das matrizes no arquivo como se fossem um vetor de uma dimensão, ou seja, lê linha a linha das matrizes e grava no binário. Lembrando que o arquivo binário armazena byte a byte, desta forma cada elemento da matriz float e double correspondem respectivamente a 4 e 8 bytes de seu arquivo.
No caso, dê uma olhada no DataInputStream e no DataOutputStream. Ele tem os métodos que lêem os tipos primitivos do java de maneira binária de um arquivo. Inclusive tipos complexos como float e double.
A questão é que um arquivo binário não é dividido em linhas. Ele é mais como um aglomerado de dados gravado sequencialmente.
Então o nextLine() não serve.
O negócio é ir lendo mesmo byte-a-byte, campo-a-campo.