¿Cuál es la mejor manera de comprimir múltiples valores en valor deserializable?

Jens

Estoy implementando una biblioteca openpeeps.com para Flutter en la que el usuario puede crear sus propios píos para usarlos como avatar dentro de nuestro producto.

Una de las razones detrás del uso de píos como avatar es que (en teoría) se puede almacenar fácilmente como un valor único dentro de una base de datos.

Una Peepdentro de mi biblioteca contiene hasta 6 PeepAtoms:

class Peep {
  final PeepAtom head;
  final PeepAtom face;
  final PeepAtom facialHair;
  final PeepAtom? accessories;
  final PeepAtom? body;
  final PeepAtom? pose;
}

Actualmente, A PeepAtomes solo un nombre que identifica el archivo de imagen subyacente necesario para crear un Peep:

class PeepAtom {
  final String name;
}

¿Cómo obtener un hachís?

Lo que me gustaría hacer ahora es obtener un valor único de Peep( into string) que pueda almacenar en una base de datos. Si recupero los datos, me gustaría deconstruir el valor en átomos únicos para poder representar las imágenes de átomos apropiadas para mostrar el Peep. Si bien no estoy realmente buscando optimizar el tamaño de almacenamiento, sería bueno si el tamaño de byte fuera pequeño.

Como normalmente no trabajo con esas cosas, no tengo idea de cuál es la mejor opción. Estas son mis (ingenuas) ideas:

  • haz a Peep.toJsony convierte la salida a base64. Probablemente ineficiente debido a un montón de caracteres innecesarios.
  • haz un PeepAtom.hashCodepara cada campo dentro de a Peepy sube esto. Como una matriz que sería de 64 bits = 8 bytes * 6 (átomos). Eso está bastante bien, pero ni un solo valor.
  • dado que solo hay un número limitado de átomos en cada categoría (menos de 100), podría usar cambios de bits y ^poner esto en un int. Sin embargo, creo que esto realmente no funcionaría porque necesitaría un identificador único y dado que estoy generando código PeepAtomdentro de mi código, probablemente sería bastante complejo.

¿Alguna idea/algoritmo mejor?

marca adler

No estoy seguro de lo que quieres decir con "bastante complejo". Parece bastante simple empaquetar sus átomos en un doble.

Tenga en cuenta que esto de ninguna manera es un "hash". Un hash es una operación con pérdidas. Supongo que desea recuperar los datos originales.

Según su descripción, necesita siete bits para cada átomo. Pueden variar en 0..98 (ya que dijiste "menos de 100"). Un doble tiene 52 bits de mantisa. Tus seis átomos necesitan 42 bits, por lo que encaja fácilmente. Para los átomos que pueden ser null, solo dale un valor especial de 7 bits sin usar, como 127.

Ahora solo usa multiplicar y sumar para combinarlos. Usa módulo y divide para sacarlos. P.ej:

double val = head;
val = val * 128 + face;
val = val * 128 + facialHair;
...

Extraer:

int pose = val % 128;
val = (val / 128).floorToDouble();
int body = val % 128;
val = (val / 128).floorToDouble();
...

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

¿Cuál es la mejor manera de devolver múltiples valores de una función en Python?

¿Cuál es la mejor manera de comprimir varias listas en ImmutableJS?

¿Cuál es la mejor manera de reutilizar componentes en múltiples proyectos en angular?

¿Cuál es la mejor manera de almacenar múltiples entradas / matrices en la tabla MYSQL?

¿Cuál es la mejor manera de configurar múltiples versiones de PHP + NGINX en macOS?

¿Cuál es la mejor manera de administrar subprocesos múltiples en JavaFX 8?

Django: ¿cuál es la mejor manera de evitar múltiples clics en un botón?

¿Cuál es la mejor manera de agregar múltiples eventos onTap en listview flutter?

¿Cuál es la mejor manera de tener múltiples "setTimeout" en jQuery?

¿Cuál es la mejor manera de escribir múltiples vistas agregadas en Django?

¿Cuál es la mejor manera de trabajar en múltiples proyectos con angular?

¿Cuál es la mejor manera de comunicarse entre múltiples procesos en ubuntu?

¿Cuál es la mejor manera de contener múltiples matrices 3D en SQL?

En graphql, ¿cuál es la mejor manera de combinar múltiples fuentes donde los campos de ambas fuentes comparten un valor común?

¿Cuál es la mejor manera de obtener los valores más altos de una matriz de claves en Perl?

¿Cuál es la mejor manera de indexar los valores máximos en el marco de datos?

¿Cuál es la mejor manera de eliminar filas en pyspark en función de múltiples condiciones?

¿Cuál es la mejor manera de devolver un par de valores en Java?

¿Cuál es la mejor manera de manejar los valores dinámicos de Iframe en BluePrism?

¿Cuál es la mejor manera de ejecutar una tarea programada de Laravel en múltiples bases de datos?

¿Cuál es la mejor manera de cambiar un valor en archivos XML en Java?

¿Cuál es la mejor manera de encontrar el último valor no vacío en la matriz?

¿Cuál es la mejor manera de trazar múltiples soluciones ODE en el mismo gráfico en Julia?

¿Cuál es la mejor manera de manejar múltiples suscripciones al mismo observable en la plantilla?

¿Cuál es la 'mejor' manera de realizar transacciones distribuidas en múltiples bases de datos usando Spring e Hibernate?

¿Cuál es la mejor manera de implementar una aplicación de escritorio Java en múltiples plataformas?

Usando Vue, ¿cuál es la mejor manera de usar un componente de paginación en múltiples componentes principales?

¿Cuál es la mejor manera de recibir datos de múltiples URL para iot en Apache Nifi?

¿Cuál es la mejor manera de obtener valor de entrada en React?

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    OAuth 2.0 utilizando Spring Security + WSO2 Identity Server

  3. 3

    Manera correcta de agregar referencias al proyecto C # de modo que sean compatibles con el control de versiones

  4. 4

    Ver todos los comentarios en un video de YouTube

  5. 5

    uitableview delete button image in iOS

  6. 6

    ¿Título del selector de SwiftUI?

  7. 7

    Swift / Firebase : Facebook 사용자가 계정을 만들 때 Firebase 데이터베이스에 제대로 저장하려면 어떻게해야합니까?

  8. 8

    ¿Es posible reemplazar los valores de un archivo config.properties a través de TFS?

  9. 9

    Representación de mapas 3D en juegos

  10. 10

    Golang ListenAndServeTLS devuelve datos cuando no se usa https en el navegador

  11. 11

    Declarar propiedades reactivas (agregar bloques de componentes dinámicamente desde la inserción de matriz)

  12. 12

    Cómo hacer que SwiftUI Text multilineTextAlignment comience desde arriba y centro

  13. 13

    Cómo depurar una aplicación React en Visual Studio 2019 usando la plantilla "Blank Node.js"

  14. 14

    Múltiples relaciones en la misma tabla con dos columnas Laravel

  15. 15

    No existe tal archivo o directorio cuando se inicia el nombre del directorio con /

  16. 16

    Verilog : 입력 신호를 한 클럭 주기로 지연시키는 방법은 무엇입니까?

  17. 17

    ¿Cómo hacer un generador de ruido Perlin más suave?

  18. 18

    Problème avec le dessin d'un élément Qml avec des appels OpenGL bruts

  19. 19

    El nombre 'HttpContext' no existe en el contexto actual en Razor

  20. 20

    WPF pleine largeur DataGridColumn sur la largeur de DataGrid

  21. 21

    Tengo algunos problemas con el syscall de golang cuando llamo a dll en win7-64

CalienteEtiquetas

Archivo