Inspecionar Protobuf e esquemas locais

Campos binários do Protobuf de tipos 0, 1, 2, 3, 4 e 5, com posições e bytes exatos.

  • Funciona no navegador
  • Sem upload
  • Confira antes de baixar

Os arquivos e esquemas ficam nesta aba e em um worker local. Nada é enviado nem armazenado automaticamente. Se você limpar ou fechar a página, os dados inseridos se perdem. Guarde os originais e salve os resultados de que precisar.

Campos binários do Protobuf de tipos 0, 1, 2, 3, 4 e 5, com posições e bytes exatos. Sem esquema, a ferramenta não adivinha nomes nem textos. Gramática local proto2/proto3, imports locais, escalares, enums, mensagens, grupos, repetidos packed, maps e oneof. Campos opcionais ausentes são aceitos e os obrigatórios são exigidos. Fragmentos são unidos; escalares usam o último valor e o oneof usa o último membro ativo. Os maps preservam duplicados para inspeção e não formam um JSON canônico. Editions e extensões não são aceitas. Sem imports remotos, construtores ou codecs gerados, eval ou execução. Inteiros saem como texto decimal e bytes em hex; isto não certifica a semântica das aplicações. Salve os relatórios e o original; o schemas.json guarda os esquemas locais. Fragmentos de mensagem em um valor de mapa são unidos; entradas ficam separadas e escalares usam a última ocorrência.

Arquivo de até 16 MiB; Protobuf de até 1 MiB; cada esquema de até 256 KiB, no máximo 1 MiB juntos. Profundidade 64; 20.000 nós de metadados ou binários; 100.000 valores físicos ou retidos; orçamento de decodificação de 32 MiB; saída gerada de 8 MiB, além do original. Prévia de 200 linhas; exportação de até 10.000 linhas. O worker para após 5 segundos. Os 64 MiB de memória linear do SQLite não representam toda a memória do navegador.

Arquivo binário local

0 B

Interpretação

Método e limites

Perfil suportado

Campos binários do Protobuf de tipos 0, 1, 2, 3, 4 e 5, com posições e bytes exatos. Sem esquema, a ferramenta não adivinha nomes nem textos. Gramática local proto2/proto3, imports locais, escalares, enums, mensagens, grupos, repetidos packed, maps e oneof. Campos opcionais ausentes são aceitos e os obrigatórios são exigidos. Fragmentos são unidos; escalares usam o último valor e o oneof usa o último membro ativo. Os maps preservam duplicados para inspeção e não formam um JSON canônico. Editions e extensões não são aceitas. Sem imports remotos, construtores ou codecs gerados, eval ou execução. Inteiros saem como texto decimal e bytes em hex; isto não certifica a semântica das aplicações. Salve os relatórios e o original; o schemas.json guarda os esquemas locais. Fragmentos de mensagem em um valor de mapa são unidos; entradas ficam separadas e escalares usam a última ocorrência.

Limites de recursos

Arquivo de até 16 MiB; Protobuf de até 1 MiB; cada esquema de até 256 KiB, no máximo 1 MiB juntos. Profundidade 64; 20.000 nós de metadados ou binários; 100.000 valores físicos ou retidos; orçamento de decodificação de 32 MiB; saída gerada de 8 MiB, além do original. Prévia de 200 linhas; exportação de até 10.000 linhas. O worker para após 5 segundos. Os 64 MiB de memória linear do SQLite não representam toda a memória do navegador.

Os arquivos e esquemas ficam nesta aba e em um worker local. Nada é enviado nem armazenado automaticamente. Se você limpar ou fechar a página, os dados inseridos se perdem. Guarde os originais e salve os resultados de que precisar.

Como inspecionar

  1. Arquivo binário local

    Carregue uma mensagem binária. O modo wire não precisa de esquema; o modo esquema precisa de arquivos .proto locais, do nome do arquivo principal e de um tipo de mensagem explícito. Carregue o exemplo para começar com sample.proto e a mensagem Sample.

  2. Esquema e metadados

    Os bytes do exemplo começam com 08 96 01 e seguem com um campo delimitado por comprimento. Com Sample {int64 id=1; string name=2;}, eles viram id=150 e name=Café. O modo wire mostra números de campo, intervalos de bytes e o conteúdo bruto, sem inventar nomes.

  3. Verificar e salvar exportações

    Compare os campos decodificados com as posições wire e a contagem de campos desconhecidos. Salve report.json, schemas.json (quando você tiver informado esquemas) e original.pb. Os inteiros são strings decimais e os bytes aparecem em hexadecimal, sem tentar adivinhar texto UTF-8.

Método e limites

Por que os relatórios wire e esquema são diferentes?

Só com o formato wire não dá para saber se um valor delimitado por comprimento é texto, bytes ou uma submensagem; quem define isso é o esquema escolhido. Campos opcionais ausentes continuam ausentes, campos repetidos mantêm todas as ocorrências e o oneof segue o último membro ativo. O relatório não é JSON canônico do Protobuf nem uma validação semântica da aplicação.

Por que não é possível ler o arquivo ou a seleção?

Use o nome completo e exato da mensagem e informe os imports locais. Varints truncados, tipos wire incorretos, campos obrigatórios ausentes e esquemas ausentes são erros. Não decodifique um envelope de aplicação comprimido ou com enquadramento como se fosse uma mensagem bruta.

O que este inspetor não faz deliberadamente?

Inspeção local de proto2 e proto3; Editions e extensões não têm suporte. São aceitos até 16 arquivos de esquema locais, com 1 MiB no total, e mensagens de até 1 MiB. Não há imports remotos, código de aplicação gerado nem execução; entradas duplicadas de map continuam visíveis.