Olá pessoal do GUJ.
Estou com um probleminha.
No meu projeto, tenho que guardar meus objetos em arquivos binários. Como você já deve saber, os registros necessitam de tamanho fixo.
Eis a questão… eu queria implementar um método que calculasse o tamanho do registro que a minha classe vai necessitar e guardá-lo em uma constante.
Eu crio constantes para guardar o tamanho de bytes que cada atributo meu vai necessitar.
Um pouquinho do meu código:
public class ArquivoBinarioClienteDAO extends ArquivoBinarioDAOFactory implements GenericDAO {
private final String CAMINHO_LISTA_CLIENTE = System.getProperty("user.dir") + "\\persistencia\\listaCliente.dat";
/* Bytes */
private final int INTEIRO = 4;
private final int LITERAL = 60; // 30 caracteres
/* Bytes dos atributos de Cliente */
private final int TAM_ID = INTEIRO;
private final int TAM_NOME = LITERAL;
private final int TAM_CPF = INTEIRO;
private final int TAM_TELEFONE = INTEIRO;
private final int TAM_RUA = LITERAL;
private final int TAM_NUMERO = INTEIRO;
private final int TAM_ESTADO = LITERAL;
private final int TAM_CEP = INTEIRO;
/* TAMANHO DO REGISTRO */
private final int TAM_REGISTRO = calculaTamanhoRegistro(ArquivoBinarioClienteDAO.class);
private ArquivoBinarioListaDAO arqBinLista;
/**
* Construtor sem argumentos
*/
public ArquivoBinarioClienteDAO() {
arqBinLista = new ArquivoBinarioListaDAO(CAMINHO_LISTA_CLIENTE);
}
public int calculaTamanhoRegistro(Class<?> classe) {
Field fields[] = classe.getFields();
int tamRegistro = 0;
for (Field field : fields) {
try {
tamRegistro += field.getInt(field);
} catch (IllegalArgumentException e) {
System.err.println("Erro ao pegar valores de um campo! Argumento Ilegal");
e.printStackTrace();
} catch (IllegalAccessException e) {
System.err.println("Erro ao pegar valores de um campo! Acesso Ilegal");
e.printStackTrace();
}
}
return tamRegistro;
}
Eu andei dando uma lida sobre reflection, mas não consegui compreender mto bem. Teria como eu pegar os valores dos Fields e somá-los??
Abraços!