/**
   * O método writeObject persiste o objeto recebido por parâmetro em arquivo. Recebe o seguinte
   * parâmetro:
   *
   * @param obj <code>Object</code> com o objeto a ser persistido. O método dispara as seguintes
   *     exceções.
   * @exception IOException caso não seja possível persistir o objeto no arquivo.
   * @exception ClassCastException caso o objeto seja de um tipo diferente do que pode ser
   *     persistido no arquivo.
   */
  @Override
  public void writeObject(Object obj) throws IOException, ClassCastException {
    Despesa despesa;

    if (obj instanceof Despesa) despesa = (Despesa) obj;
    else throw new ClassCastException();

    arquivoBinario.writeInt(despesa.getCodigo());

    arquivoBinario.writeInt(despesa.getCodigoCategoria());

    arquivoBinario.writeInt(despesa.getCodigoPagamento());

    arquivoBinario.writeLong(despesa.getDataDespesa().getTimeInMillis());

    arquivoBinario.writeLong(despesa.getDataPagamento().getTimeInMillis());

    arquivoBinario.writeChars(setStringLength(despesa.getDescricao(), 40));

    arquivoBinario.writeDouble(despesa.getValorDespesa());

    arquivoBinario.writeInt(despesa.getNumeroParcelas());

    arquivoBinario.writeChars(setStringLength(despesa.getNumeroCheque(), 20));
  } // writeObject()
  /**
   * O método readObject retorna o objeto em que o ponteiro do arquivo está posicionado. O método
   * dispara a seguinte exceção:
   *
   * @exception IOException caso não seja possível recuperar o objeto do arquivo.
   * @return um <code>Despesa</code> com os dados lidos do arquivo.
   */
  @Override
  public Despesa readObject() throws IOException {
    Despesa despesa = new Despesa();

    despesa.setCodigo(arquivoBinario.readInt());

    despesa.setCodigoCategoria(arquivoBinario.readInt());

    despesa.setCodigoPagamento(arquivoBinario.readInt());

    Calendar calDes = Calendar.getInstance();
    calDes.setTimeInMillis(arquivoBinario.readLong());
    despesa.setDataDespesa(calDes);

    calDes.setTimeInMillis(arquivoBinario.readLong());
    despesa.setDataPagamento(calDes);

    despesa.setDescricao(readString(40, true));

    despesa.setValorDespesa(arquivoBinario.readDouble());

    despesa.setNumeroParcelas(arquivoBinario.readInt());

    despesa.setNumeroCheque(readString(20, true));

    return despesa;
  } // readObject()