[RESOLVIDO]Como ler corretamente todos os dados de DataInputStream?

A variável “din” tem 5 registros com 8 campos. Da forma que fiz, conforme o condigo abaixo, da erro depois de ler o último campo, usando while ((aux = din.readUTF())!= null), que está gardado dentro da variável “din”. Tbm usei while ((aux = din.readLine())!= null), mas lia das informaçoes de foma errada, além de ser Obsoleto!

Alguém poderia me dar uma dica de como controlar a leitura até o último registro com o While?

                din = http.openDataInputStream();
                Vector linha = new Vector();
                tam = 8;
                String aux;
                int campos = 0;
                int ch = 0;
                try {
                    while ((aux = din.readUTF())!= null) {  
                        coluna.add(aux);
                        campos++;
                        if (campos ==  8) {
                            linha.add(coluna);
                            coluna = new Vector();
                            campos = 0;
                        }
                    }

Abraço!
Donizete Waterkemper

De modo geral, para ler corretamente um DataInputStream, é necessário saber como é que foi criado o arquivo que deve ser lido. Normalmente você precisaria saber se foi usado um DataOutputStream para gerá-lo, e qual foi a sequência exata das operações.

Por exemplo, para cada writeUTF você usa um readUTF, para cada writeInt um readInt, e assim por diante.

De uma olhada na api

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html

Dai veja se consegue dar continuação , caso esteja em duvida , poste aqui para lhe ajudarmos .

Eu preenchi ele dessa forma:


DataOutputStream dout;

                if (resp != null) {
                    for (int pos = 0; pos < resp.size(); pos++) {
                        dout.writeUTF(((Vector) resp.elementAt(pos)).elementAt(0).toString());
                        dout.writeUTF(((Vector) resp.elementAt(pos)).elementAt(1).toString());
                        dout.writeUTF(((Vector) resp.elementAt(pos)).elementAt(2).toString());
                        dout.writeUTF((((Vector) resp.elementAt(pos)).elementAt(3).toString()));
                        dout.writeUTF((((Vector) resp.elementAt(pos)).elementAt(4).toString()));
                        dout.writeUTF((((Vector) resp.elementAt(pos)).elementAt(5).toString()));
                        dout.writeUTF((((Vector) resp.elementAt(pos)).elementAt(6).toString()));
                        dout.writeUTF((((Vector) resp.elementAt(pos)).elementAt(7).toString()));
                    }
                }

Agora preciso montar esse Vector novamente, mas está dando erro depois do último “campo”, conforme o primeiro código q postei aqui.

Abraço!
Donizete Waterkemper

Grave um indicador de quantos elementos você pretende ler do seu arquivo com writeInt. Ao ler seu arquivo de volta, leia esse indicador com readInt, e então fica mais fácil você conseguir ler tudo.

Nunca use readLine em um DataInputStream, embora esse método esteja disponível. É misturar abacaxis com carambolas; é uma mistura indigesta.

Por que você está usando Vector ao invés de ArrayList? Está programando em Java 1.2 ou inferior?

Bom dia ViniGodoy,

Estou programa para J2ME CDC.

Donizete Waterkemper

Ok, vou mover o tópico para a área de ME. Senão mais gente pode sugerir soluções do SE. :wink:

Galera, problema resolvido. A dica do nosso amigo enantiomero me ajudou a resolver o problema.

Obrigado a todos!

abraço!
Donizete Waterkemper