Ler arquivo binário

Olá pessoal,

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();
        }

}
}

Depende, em que formato foram gravados os dados desse arquivo aí?

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.

Sei tb que as matrizes estão assim:

% Compiled module: READ_FILE.
DOUBLE = Array[4, 16, 16, 16]
DOUBLE = Array[4, 16, 16, 16]
FLOAT = Array[16, 16, 16]
FLOAT = Array[16, 16, 16]

Que entendi que possui valores do tipo float e double…

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.

Mais oq fiz…esta totalmente errado??

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.