public double readDouble()
          throws IOException {
    mark(DEFAULT_READ_LIMIT);
    int cfaslOpcode = read();
    switch (cfaslOpcode) {
      case CFASL_P_FLOAT:
        return readFloatBody(false);
      case CFASL_N_FLOAT:
        return readFloatBody(true);
      default:
        reset();
        throw new RuntimeException("Expected a double but received OpCode=" + cfaslOpcode);
    }
  }