Ajuda para ler um arquivo e armazenar seus dados

Olá pessoal,

estou com uma dúvida terrível, tenho um arquivo .bin para ler, nesse arquivo contém matrícula, nome do aluno, sexo e peso…
Porém ao ler o arquivo usando o código a seguir algumas informações vem erradas devido ao modo como estou lendo, segue o código:

package selecao;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.RandomAccessFile;
import java.util.StringTokenizer;

public class Selecao {
	
	int mat;
	String aluno;
	char sexo;
	double peso;
	
	private static RandomAccessFile arquivo;
	
	private void abreArquivo(){
		
		StringBuffer sb = new StringBuffer();
		
		try {
			FileReader arq = new FileReader("C:/orig_p.bin");
			BufferedReader br = new BufferedReader(arq);
			String s;
			do{
				s = br.readLine();
				if(s!=null){
					sb.append( s + "\r\n" );
					
				}
			}while(s!=null);
			System.out.println(sb);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

public static void main(String [] args){
	Selecao sel = new Selecao();
	sel.abreArquivo();
}
}

Tenho esse código em C que le o mesmo arquivo, e da certo nesse, gostaria de saber se algum me da uma ajuda:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>


//#define RAND_MAX 100

void semente(void);
int geranumero(FILE *arq);

struct stru{
    int  matricula;
    char nome[20], sexo[1];
    float peso;
    } reg;
char buff[33];

int main()
{
	int a,s,j,sexo;
 	double i;
	float b,peso;
 	char alu1[20],alu[10];
	
	FILE *arq;
	arq = fopen("origi_c.bin","w+b"); // Abre o arquivo
  
  	if(arq == NULL) // Verifica se ocorreu erro
  	{
    	printf(" Erro ao abrir arquivo\n");
        system("PAUSE");
    } //Fim IF
    else
    {
	    semente();
	    for(j=0; j<3000;j++)
	    {
   			a = geranumero(arq);
   			reg.matricula = a; // Matricula recebe a
    		s = a%2; // Determina o sexo
    		if (s == 1)
    		{
   				strcpy(reg.sexo,"M");
   				strcpy(alu,"Aluno");
        	} // Fim IF
        	else
        	{
   	        	strcpy(reg.sexo,"F");
   	        	strcpy(alu,"Aluna");
        	}
        	// Cria o nome do Aluno
			
           	itoa(a,alu1,10);
   			strcat(alu,alu1);
   			strcpy(reg.nome, alu);
   			// Estabelece o peso do aluno
   			
      		b = a; // Muda de Inteiro para float
 	   		peso = modf((((b-100)/(b+100))*100),&i)*100;
 	   		reg.peso = peso;
 	   		// Grava o Registro  
 	   		fwrite(&reg,sizeof(struct stru),1,arq);
 	   		printf("%s",".");
 	   	} // Fim FOR
  	
  		rewind(arq);
  		printf("\n");		
  		for (j=0;j<10;j++)
  		{
  		    fread(&reg,sizeof(struct stru),1,arq); // Leitura usando fread
        	printf("%-3d %6d %20s %s %2.2f \n",j+1,reg.matricula,reg.nome,reg.sexo,reg.peso);
       	}
       system("PAUSE");
   }  
   fclose(arq); // Fecha o Arquivo

} // Fim main

void semente(void)
/* obt‚m a semente para rand da hora do sistema
   e mostra os primeiros 10 n£meros
*/
{
  int i, stime;
  long ltime;

  /* obt‚m a hora de calend rio atual */
  ltime =time(NULL);
  stime = (unsigned) ltime/2;
  srand(stime);
}

int geranumero(FILE *arq)
/*
Esta função gera um número aleatorio único.
caso o número já exista ela gera outro
*/

{
	int a;
	char continua = 1;
	do
	{
		a = rand();
  		rewind(arq);
  		continua = 0;
		
  		fread(&reg,sizeof(struct stru),1,arq); // Leitura usando fread
  			
   		while (!feof(arq))
		{
			if (reg.matricula == a)
    		{
    			continua = 1;
			    break;
    		}
    			fread(&reg,sizeof(struct stru),1,arq); // Leitura usando fread
   		} // Fim While
	} while (continua); // Fim do

	return(a);
}	

Abraços,
Obrigado

tenta usar

File file = new File("C:/orig_p.bin");
FileInputStream fileinputstream = new FileInputStream(file);

 int numberBytes = fileinputstream.available();
            byte bytearray[] = new byte[numberBytes];

            fileinputstream.read(bytearray);

            for(int i = 0; i < numberBytes; i++){
                System.out.println(bytearray[i]);
            }

Bruno, eu já tinha tentado algo parecido com isso, desse jeito ele lê os bytes, funciona sim, mas agora acredito que tenho que transformar esses bytes em tipos de dados, pq nesse arquivo como disso, está a matricula(int), aluno(String), sexo(char) e peso(float)…
não consigo fazer essa transformação, ou então deve haver um outro jeito de ler esse arquivo naum?! já lendo os dados desse jeito…

Fico aguardando
Obrigado

Galera,

vou ter q ler isso como se fosse uma estrutura, no código em C ele lê a struct, como faço isso em java??

Terei que fazer algo parecido com isso?:

	public void registros(int mat, String aluno, char sexo, float peso){
		this.mat = mat;
		this.aluno = aluno;
		this.sexo = sexo;
		this.peso = peso;
	}

Como que vou ler esses dados, eu acredito que seja isso, ler esse arquivo como estrutura, mas estou perdido pra fazer isso, alguem pode esclarecer mais?

abraços