es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué FieldCodec se debe utilizar al escribir un RepeatedField byte a byte en un MemoryStream?

El SDK de protobuf para C# contiene un proyecto de ejemplo llamado AddPerson.cs.

Utiliza el archivo addressbook.proto, el cual define un campo repetido:

repeated PhoneNumber phones = 4;

Estoy intentando agregar una función a AddPerson.cs, la cual crearía un string MD5 del campo repetido:

private string RepeatedFieldToMD5String<T>(RepeatedField<T> repeatedField)
{
    MemoryStream memoryStream = new MemoryStream();
    repeatedField.WriteTo(new CodedOutputStream(memoryStream), new FieldCodec<T>());

    return string.Concat
        (
            MD5.Create().ComputeHash
            (
                memoryStream
            ).Select(x => x.ToString("x2"))
        );
}

El problema es que no hay tal constructor para el FieldCodec, necesita algunos argumentos.

Supongo que tengo que decirle “por favor, toma un FieldCodec que sea adecuado para escribir un objeto byte por byte en una matriz” … pero ¿cómo se dice eso en C#? 🙂

En el archivo FieldCodec.cs vi un método FieldCodec.ForBytes(), pero necesita una etiqueta. ¿Cuál sería una etiqueta adecuada aquí?

La razón por la que hago esta pregunta es que estoy intentando tomar un campo RepeatedField en mi proyecto real, generar un string MD5 sobre todo esto y usarlo en el encabezado HTTP If-None-Match/ETag.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Estás intentando agregar una función al archivo AddPerson.cs que crearía una cadena MD5 a partir del campo repetido. Has notado que el constructor FieldCodec requiere algunos argumentos y no estás seguro de qué etiqueta usar para el método FieldCodec.ForBytes(). Estás intentando usar la cadena MD5 en la cabecera HTTP If-None-Match/ETag.

    Si entiendo correctamente, estás buscando una forma de generar una cadena MD5 a partir de un objeto RepeatedField. Puedes usar el método FieldCodec.ForBytes() para generar una etiqueta adecuada para el constructor FieldCodec. La etiqueta debe ser un identificador único para el objeto RepeatedField. Luego puedes usar el objeto FieldCodec para escribir el objeto RepeatedField en un MemoryStream y generar la cadena MD5 a partir del stream.

Comments are closed.