Porque?

3 respostas
C

Meus cumprimentos a todos.Muitas vezes fazemos as coisas sem saber o pq elas se procedem desta ou daquela forma.Partindo deste principio tentei fazer alguns teste sobre o tamanho de um objeto definido por mim.Crie esta classe e este metodo para ver o tamanho dela:

import java.io.Serializable;
public class Cliente implements Serializable
{
    private char[] sNome;
    private char[] sSobreNome;
    private char[] sCidade;
    public Cliente(char[] nome,char[] sobreNome,char[] cidade)
    {
       sNome = new char[35];
       sSobreNome = new char[35]; 
       sCidade = new char[30];
       this.sNome = nome;
       this.sSobreNome = sobreNome;
       this.sCidade= cidade;
    }
}

e o metodo

public static int sizeof(Object o) 
   {
        int tam =0;
        try 
        {
           ByteArrayOutputStream ba = new ByteArrayOutputStream();
           ObjectOutputStream oos = new ObjectOutputStream(ba);
           oos.writeObject(o);
           tam = ba.size();
           //tam = ba.toByteArray().length;
        }
        catch (IOException ex) 
       {
         JOptionPane.showMessageDialog(null,ex.toString());
        }
        return tam;
   }

Apos executado tive como resultado 183 (considerei metodos tambem q nao foram postados).Considerando q, neste caso, minha classe tem atributos nome,sobre e cidade estaticos com tamanho 35,35 e 30, respectivamente, se a soma do tamanho das variaveis tem 100 e java considera cada caracter com 2 bytes entao teria 200 bytes no minimo.
Assim, somado com o tamanho de alguma referencia para o objeto e para controle dos metodos daria mais de 200.Logo, nao entendi qual o logica q java usa para este caso e peço a quem souber me responder.Desde jah agradeço.

Valeu
Carlos Martins

3 Respostas

danieldestro

Carlos, você deve ser programador C/C++, certo?
EHehEHhehEHhee…

Falo isso pq vc usou char[] ao invés de String.

Mesmo você usando char, cada variável char aloca 16 bits (2 bytes).

Rafael_Steil

Java nao tem nada parecido com o sizeof(). Para mais info, veja


Rafael

C

danieldestro jah usei C mas hoje uso sempre java para trabalhos na facu(nao trabalho na area ainda).Mas a questao em usar char foi pq queria algo q fosse estatico e nao dinamico.Assim, usando string nao estipularia um tamanho maximo para cada campo(me corrija se estiver errado).
E quando a questao q apontou o Rafael Steil , jah nao sabia destes UTF-8 q um ASCII ocupam a metade do espaco(UTF-8 encoded and so any ASCII content takes half as much space).Algum tempo fiz um pequeno e simples banco de dados para um projeto e as transferencia do disco/memoria eram feitas por bloco.Nestas transferencia usava este sizeof buferizado em Array de byte para quardar o tamanho de cada objeto bloco.Por incrivel que pareça deu certo.Usando o RandomAccessFile pegava a posiçao exata do bloco q queria dentro do meu banco e transferia para memoria.
Eh isso ai vivendo e aprendendo.De toda forma valeu pelos comentarios.

Carlos Martins

Criado 29 de abril de 2005
Ultima resposta 29 de abr. de 2005
Respostas 3
Participantes 3