Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Eu_Nina

[Resolvido] Estruturando Um Arquivo Binário

Recommended Posts

Olás...

 

Precisei ler dois arquivos q são matrizes e desses arquivos retirei 4 "variaveis" desses arquivos lido e salvei em um arquivo binário ....só que possivelmente ao ler esses arquivos, extrair dados e salvar em um binário, pode ser q ao salvar no binário os dados podem estar desestruturados, preciso estruturar esse arquivo binário em uma matriz do tipo [4,16,16,15] existe essa possibilidade no JAVA. Alguém pode me ajudar??

 

Consigo ler o arquivo binário:

 

import java.io.*;

public class read_file
{

     public static void main( String[] args )
     {
         read_file t = new read_file();
         t.ler();
     }

     public void ler()
     {

        try
        {
           FileInputStream file = new FileInputStream( "C:/data.bin" );
           ObjectInputStream le = new ObjectInputStream( file );

           while( true )
           {
              Object obj = le.readObject(); // lê
              System.out.println( obj );
           }
        }
        catch( EOFException e )
        {
           return;
        }
        catch( Exception exception )
        {

        }

     }
}

 

 

Só q não estou conseguindo estruturar em uma matriz esse arquivo binário. Entenderam?

 

Aguardo respostas..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não consegui entender exatamente o que você quer. Mas de cara já posso adiantar que esse seu código entra em loop infinito. Vai ficar escrevendo na tela até travar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não consegui entender exatamente o que você quer. Mas de cara já posso adiantar que esse seu código entra em loop infinito. Vai ficar escrevendo na tela até travar.

 

 

Precisei ler dois arquivos e reduzir em 1 arquivo binário, agora preciso preciso estruturar esse arquivo binário em uma matriz, pois o arquivo binário pode estar em ordem aleatoria....queria saber se existe no JAVA uma forma de estruturar esse arquivo binário em uma matriz do tipo [4,16,16,15]?

 

No meu caso o arquivo lido e reduzido a um arquivo minimo(binário) é bastante grande, é uma matriz [4, 16, 16, 15]

 

Um exemplo simples:

Se tenho uma matriz 2x3 e ao ler e a partir desse criar um outro arquivo minimo(binário), esse arquivo minimo pode ter sido estruturado da seguinte forma: 0 3 1 4 2 5. o que preciso é estruturar de forma q fique igual ao lido [4,16,16,15]

 

Por exemplo se tenho a matriz abaixo para estruturar o arquivo binário q citei acima, terei q fazer dois "for" +- assim:?

 

0 1 2

3 4 5

 

 

 

for j = 1,2
{ 
   for i = 1,3{ 
      read matriz(i,j)

   } 
}

 

E como faço para o código q postei anteriormente não ficar em loop infinito?? Se puder me ajudar...

Compartilhar este post


Link para o post
Compartilhar em outros sites
E como faço para o código q postei anteriormente não ficar em loop infinito?? Se puder me ajudar...

Quando usar while (true) obrigatoriamente dentro do escopo do loop tem que ter um break ou um System.exit(int) pra encerrar o loop ou a aplicação. Caso contrário será loop infinito. De preferência nunca use while (true).

 

Como você está separando os valores da matriz dentro do arquivo? Com vírgula, espaço, ponto e vírgula?

A minha dica é que armazene cada linha dos arquivos numa lista de String. Depois você trata esses valores.

 

O ideal é que você tenha um método pra ler arquivos. Onde você passa pra ele um arquivo como parâmetro e ele lê o arquivo e retorna os dados do arquivo. Podendo os dados serem retornados como uma lista.

List<String> lista = new ArrayList<String>();
try {
   BufferedReader reader = new BufferedReader(new FileReader(new File("caminho/do/arquivo")));
   String linha;
   while (reader.ready()) {
       linha = reader.readLine();
       lista.add(linha);
   }
   reader.close();
} catch (Exception ex) {
   ex.printStackTrace();
}

 

Leia o arquivo 1 e o arquivo 2 e armazene os dados deles numa lista. Agora é só fazer um loop na lista e ir salvando o arquivo. Você pode ter um método só pra salvar o arquivo, onde este método recebe a lista como parâmetro.

try {
   BufferedWriter writer = new BufferedWriter(new FileWriter(new File("caminho/do/arquivo")));
   for (String linha : lista) {
       writer.write(linha); // Não sei se ele quebra linha. Caso não quebre adicione um "\n";
   }
   writer.flush();
   writer.close();
} catch (Exception ex) {
   ex.printStackTrace();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
E como faço para o código q postei anteriormente não ficar em loop infinito?? Se puder me ajudar...

Quando usar while (true) obrigatoriamente dentro do escopo do loop tem que ter um break ou um System.exit(int) pra encerrar o loop ou a aplicação. Caso contrário será loop infinito. De preferência nunca use while (true).

 

Como você está separando os valores da matriz dentro do arquivo? Com vírgula, espaço, ponto e vírgula?

A minha dica é que armazene cada linha dos arquivos numa lista de String. Depois você trata esses valores.

 

O ideal é que você tenha um método pra ler arquivos. Onde você passa pra ele um arquivo como parâmetro e ele lê o arquivo e retorna os dados do arquivo. Podendo os dados serem retornados como uma lista.

List<String> lista = new ArrayList<String>();
try {
   BufferedReader reader = new BufferedReader(new FileReader(new File("caminho/do/arquivo")));
   String linha;
   while (reader.ready()) {
       linha = reader.readLine();
       lista.add(linha);
   }
   reader.close();
} catch (Exception ex) {
   ex.printStackTrace();
}

 

Leia o arquivo 1 e o arquivo 2 e armazene os dados deles numa lista. Agora é só fazer um loop na lista e ir salvando o arquivo. Você pode ter um método só pra salvar o arquivo, onde este método recebe a lista como parâmetro.

try {
   BufferedWriter writer = new BufferedWriter(new FileWriter(new File("caminho/do/arquivo")));
   for (String linha : lista) {
       writer.write(linha); // Não sei se ele quebra linha. Caso não quebre adicione um "\n";
   }
   writer.flush();
   writer.close();
} catch (Exception ex) {
   ex.printStackTrace();
}

 

 

Sobre o loop infinito fiz assim: ...inseri o break...esta certo oq fiz?

 

Agora com relação a minha dúvida de como estruturar o arquivo binário....você pode me ajudar??

 

Olha só...eu li dois arquivos um .sav e o .cnj desses dois arquivos extrai os seguints dados:

 

writeu, modelo.imag, conjugado.imag, modelo.scatter, conjugado.scatter

eu usei o writeu - o writeu já converte p binário, isso eu fiz usando IDL ..não sei se conhece.. p converter p um arquivo reduzido binário.

 

Bom, consegui converter em um unico arquivo reduzido binário só q agora vem meu problema, não sei como esses dados foram gravados no binário, pode ser q esteja como uma "linguiça" ....como o .sav e .cnj q li é uma matriz....preciso estruturar esse binário em matriz tb só q é uma matriz do tipo [4,16,16,15]. Consigo ler o binário no java, mas não to sabendo como começar p montar essa estrutura, entendeu?

 

Pensei em fazer algo assim como segue no código abaixo...Porém, não sei se esta certo e como ajustar isso ao código q leio o binário??

Se você puder me ajudar...

 

for(int i=0; i<matriz[0].length; i++){
   for(int j=0; j<matriz[0].length; j++){
   }
}

 

import java.io.*;

public class read_file
{

     public static void main( String[] args )
     {
   	  read_file t = new read_file();
         t.ler();
     }

     public void ler()
     {

        try
        {
           FileInputStream file = new FileInputStream( "C:/Documents and Settings/Web/IDLWorkspace/Projeto_Estudo/data.bin" );
           ObjectInputStream le = new ObjectInputStream( file );

           while( true )
           {
              Object obj = le.readObject(); // lê
              System.out.println( obj );
              break;
           }
        }
        catch( EOFException e )
        {
           return;
        }
        catch( Exception exception )
        {

        }

     }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

He! He! Isso já está ficando cômico! Quanto mais você escreve, menos eu entendo.

Sobre o loop infinito fiz assim: ...inseri o break...esta certo oq fiz?

Do jeito que você fez está errado. No primeiro passo do loop ele será interrompido pelo break.

 

Quanto aos arquivos, você quer dizer que os dados deles são:

writeu, modelo.imag, conjugado.imag, modelo.scatter, conjugado.scatter

Ou seja, valores separados por vírgula.

 

Depois você fala que quer gerar uma matriz quadridimensional (quatro dimensões).

[4,16,16,15]

Se assim for, o seu loop tem que ser nas quatro dimensões da matriz.

 

Eu realmente não consegui entender. Talvez você esteja falando de algo que eu não conheço, por isso minha dificuldade em entender. Eu por exemplo não entendo o que IDL tem a haver com isso.

 

Desejo boa sorte a você. Se eu puder ajudar em mais algo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

He! He! Isso já está ficando cômico! Quanto mais você escreve, menos eu entendo.

 

Do jeito que você fez está errado. No primeiro passo do loop ele será interrompido pelo break.

 

Quanto aos arquivos, você quer dizer que os dados deles são:

 

Ou seja, valores separados por vírgula.

 

Depois você fala que quer gerar uma matriz quadridimensional (quatro dimensões).

 

Se assim for, o seu loop tem que ser nas quatro dimensões da matriz.

 

Eu realmente não consegui entender. Talvez você esteja falando de algo que eu não conheço, por isso minha dificuldade em entender. Eu por exemplo não entendo o que IDL tem a haver com isso.

 

Desejo boa sorte a você. Se eu puder ajudar em mais algo...

 

 

Consegui resolver isso....obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.