Monday 5 February 2018

Plist format binary options


Estou tentando atender uma lista de propriedades de resultados de pesquisa para o meu aplicativo para iPhone. O servidor é um protótipo, escrito em Python. Primeiro, encontrei Pythons incorporado em plistlib, o que é incrível. Eu quero dar um tiro ao tipo de pesquisa como você, então preciso que seja tão pequeno quanto possível e o xml era muito grande. O formato do plist binário parece ser uma boa escolha. Infelizmente, o plistlib não faz arquivos binários, então avance rapidamente para o PyObjC. (Segue: Estou muito aberto a quaisquer outros pensamentos sobre como realizar pesquisas ao vivo. Eu já reduzi os dados tanto quanto possível, incluindo apenas exibindo resultados suficientes para preencher a janela com o teclado do iPhone, o que é 5.) Infelizmente, Embora eu conheça Python e estou ficando bastante decente com o Cacau, eu ainda não entendo PyObjC. Este é o equivalente ao Cacau do que eu quero fazer: pensei que devia ser capaz de fazer algo como isso, mas dataWithPropertyList não está na lista de diretórios de objetos NSPropertyListSerialization (). Também devo provavelmente converter a lista para NSArray. Eu tentei os documentos PyObjC, mas é tão tangencial ao meu trabalho real que eu pensei que eu tentei um SO SOS, também. É assim que eu estou lendo no plist no lado do iPhone. Feliz de esclarecer se qualquer um desses não faz sentido. Property ListBinary O formato da lista de propriedades binárias é um dos vários formatos que foram usados ​​para arquivos plist. O padrão significa para aplicações em sistemas operacionais desprovidos de NeXTSTEP (incluindo os atuais sistemas operacionais Apple) para armazenar dados de configuração. O formato binário foi introduzido mais recentemente do que os outros formatos, mas agora é o padrão para os sistemas Apple. Descrição do formato Tipos disponíveis Os seguintes tipos estão disponíveis em um plist binário: singleton (boolean, null, fill) integer data do flutuador dados binários string de byte único cadeia de bytes duplos UID array dictionary File Sections Um arquivo de plist binário tem quatro seções: os primeiros 8 bytes São um identificador, igual a bplistXX, onde XX é de dois dígitos. Bplist00 e bplist01 são conhecidos, não conheço as diferenças. O segundo é todos os elementos no plist, codificado e concatenado. Terceiro é a concatenação dos deslocamentos de todos os elementos no plist, cada deslocamento dado como um inteiro não assinado em um número fixo de bytes. Um objeto no plist possui um número de referência baseado na indexação baseada em 0 desta tabela, e. O número de objeto 0 é o objeto no deslocamento dado primeiro nesta tabela. Os 32 bytes finais, a seção do trailer. Os 32 bytes finais de um plist binário possuem o seguinte formato: 6 bytes de x00 preenchendo um inteiro de 1 byte, que é o número de bytes para um valor de deslocamento. Os valores válidos são 1, 2, 3 ou 4. Os valores de deslocamento são codificados como números inteiros não assinados, grandes endiantes. Deve ser suficientemente grande para codificar o deslocamento da tabela offset, não apenas o deslocamento do objeto mais alto. Um inteiro de 1 byte que é o número de bytes para um número de referência de objeto. Os valores válidos são 1 ou 2. Os números de referência são codificados como números inteiros não assinados, grandes endiantes. 4 bytes de x00 preenchendo um inteiro de 4 bytes que é o número de objetos no plist 4 bytes de x00 preenchendo um inteiro de 4 bytes que é o número de referência do objeto raiz no plist. Isso geralmente é zero. 4 bytes de x00 preenchendo um inteiro de 4 bytes que é o deslocamento no arquivo do início da tabela de deslocamento, denominado acima como o terceiro elemento em uma codificação binária do objeto. A codificação dos tipos disponíveis é a seguinte: Os quatro primeiros bits São um número de identificação do tipo de objeto, de acordo com o seguinte mapeamento: 0x0 singleton 0x1 inteiro 0x2 flutuador 0x3 data 0x4 dados binários 0x5 cadeia de byte único 0x6 cadeia de bytes duplos 0x8 UID matriz de 0xa 0xd dicionário Os segundos quatro bits são o tamanho do objeto . Se o valor dado for 15, isso significa que o tamanho do objeto verdadeiro é maior do que pode ser expresso em quatro bits. Neste caso, o próximo byte é o início do tamanho real, codificado como os objetos inteiros, exceto que o valor não está assinado. Este não é o caso dos objetos de tipo 0x0 no entanto, veja abaixo detalhes. Referirei este valor como o comprimento do objeto. A codificação para o restante do objeto varia de acordo com o tipo. O comprimento do byte é o número de bytes usados ​​na codificação do objeto, sem contar a codificação do tipo de número de identificação e comprimento do objeto já discutido. O número de tipo 0x0 agrupa valores booleanos, um valor nulo e algo chamado preenchimento por plutil. pl. Não sei por que é preenchido. O comprimento do objeto é, na verdade, o valor do objeto, e o comprimento do byte é sempre zero. Um valor de 0 significa nulo, 8 significa Falso, 9 significa Verdadeiro e 15 significa preenchimento. Qualquer outro valor é inválido. O comprimento do byte é igual a 2 para a potência do comprimento do objeto. Os comprimentos de objeto válidos são 0, 1, 2 e 3 para números inteiros de 1, 2, 4 e 8 bytes, respectivamente. A codificação é como um grande endiante, inteiro assinado no número apropriado de bytes. O comprimento do objeto para a conversão do comprimento do byte é o mesmo que para números inteiros. O comprimento do objeto é 2 ou 3, correspondente a um comprimento de byte de 4 ou 8. A codificação é como um flutuador grande-endiano, de precisão única ou de precisão dupla, de acordo. As datas são armazenadas como um flutuador com um valor de segundos desde a época de 1 de janeiro de 2001, às 00:00:00 GMT. A codificação é a mesma que a codificação de flutuadores, exceto que o comprimento do objeto é sempre 3, para um comprimento de byte de 8. Dados binários O comprimento do byte é o comprimento do objeto e qualquer valor é válido. Os bytes não são interpretados. String do byte único O comprimento do byte é o comprimento do objeto e qualquer valor é válido. A codificação é ASCII. String do byte duplo O comprimento do byte é o dobro do comprimento do objeto e qualquer valor é válido. A codificação é utf-16 (grande endian). A codificação é como números inteiros, exceto os valores não assinados. Estes são usados ​​extensivamente em arquivos escritos usando NSKeyedArchiver, um serializador para objetos Objective-C. O valor UID parece ser o índice de um valor dentro da lista de objetos dentro de tal plist. O comprimento do byte é o comprimento do objeto vezes o número de bytes por referência de objeto para este arquivo plist, ou seja, uma ou duas vezes o comprimento do objeto. Qualquer comprimento do objeto é válido. A codificação é a concatenação de números de referência de objeto como números inteiros não assinados, grandes-endiantes, cada codificado no número de bytes por referência de objeto para este arquivo plist. Dicionário O comprimento do byte é o dobro do comprimento do objeto o número de bytes por referência do objeto. A codificação é como a concatenação de dois arrays codificados, o primeiro das chaves e o segundo dos valores. O primeiro valor na lista de chaves corresponde ao primeiro valor na lista de valores, e assim por diante. Notas finais Ao escrever um arquivo plist binário, todos os valores que se repetem dentro do arquivo devem ser codificados apenas uma vez e esse único objeto referenciado sempre que esse valor se repete. Outros linksConverter Binary Plists Os formulários binários são os arquivos que os produtos Apple usam para armazenar informações. A maneira mais fácil de visualizá-los é convertê-los em XML. Observe que os dados binários em XML plist são convertidos na base64 e, portanto, as cadeias nos dados binários não são diretamente visíveis. O programa plutil é nativo do Mac OS X (a partir de 10.2), no entanto, também está incluído quando o iTunes está instalado em um PC com Windows. No linux libplist 1 também fornece um equivalente de plutil. Plutil em um PC com Windows está armazenado em: O que pode ser adicionado ao PATH em variáveis ​​ambientais, de modo que plutil pode ser executado de qualquer lugar Se você puder copiar o executável plutil para outro diretório, ele requer uma série de DLLs para funcionar. Essas dlls são: ASL, CFNetwork, CoreFoundation, Foundation, icudt46, libdispatch, libicuin, libicuuc, libtidy, libxml2, objc, ptheadVC2, SQLite3 e zlib. Todos estes são encontrados na pasta Apple Application Support, juntamente com plutil. exe. Para converter Plists binários em XML, execute o comando: Ou com o libplist ExternalPersistator Plistinator é feito para editar os arquivos do Plist. Se você já sabe exatamente o que precisa, o Plistinator estará pronto para criar seus Plists para você. Plistinator é: Feito para o trabalho Leve Fácil de usar Robusto Poderoso Crunches Amplo bin XML arquivos plist No Mac, Windows amp Linux Continuamente Melhorado Se você já sabe que precisa de uma ferramenta de edição Plist, ótima Apenas vá para a nossa loja Gumroad e pegue Plistinator para Sua plataforma agora. Pensamos que o Plist é um bom formato para dados estruturados para aplicativos em todas as plataformas. Melhor, pelo menos do que as alternativas. E quando você tem Plistinator torna-se um excelente formato. Preciso ser convincente Leia sobre Plist é abreviação de Lista de propriedades: é um formato de arquivo para armazenar dados estruturados. Os Plists são de código aberto e foram durante aproximadamente a Internet. Plists são conhecidos por seu uso pela Apple em gadgets como o iPhone e no Mac. E acontece que eles funcionam muito bem em outras plataformas também. Veja abaixo os detalhes sujos dos formatos de armazenamento Plist. Plists são ideais para enviar dados com seus aplicativos, especialmente se esses dados não variam muito. Se os dados em seu aplicativo estiver estruturado - por exemplo, heierarchical -, o Plist pode ser uma escolha melhor para a persistência de dados do que um banco de dados. Plists não deve ser confundido com o arquivo Java XML Property List - que canapost armazena a estrutura profunda que um plist pode. As listas de propriedades Java também não possuem uma opção binária para o armazenamento eficiente de grandes conjuntos de dados. Estável. Itaposs esteve por décadas. O local de nascimento do arquivo Plist foi NeXT Computer no final de 80aposs, onde ele tinha um formato baseado em texto. Os plists modernos de hoje, foram desenvolvidos pela Apple para o seu primeiro sistema operacional Mac OSX e há cerca de 2000, aproximadamente, sobre o tempo que a JSON surgiu. Plists estão em muitos projetos de código aberto, incluindo GnuSTEP e Darwin, e os projetos OpenSource da Appleaposs. Os Plists eficientes são rápidos em ler e escrever, e rapidamente configuráveis: geralmente é apenas um forro. O formato XML é legível por humanos (mais ou menos) e o formato binário é muito eficiente em termos de espaço e rápido de carregar. Os Planos Estruturados podem fazer Arrays de dicts de booleanos, números, dicts e matrizes de. Bem, você começa a idéia. Como os dídices podem ser mapeados para seus objetos, os Plists são uma ótima maneira de inicializar objetos em seu aplicativo. Open Since Plist é um formato de código aberto, os plists estão disponíveis para todas as plataformas, desde que desejemos usá-las. Verifique a página de recursos do código plistinatoraposs para implementações de comunidade plist em C, C, Java, Python e outros idiomas. Arenapost plists apenas XML Por que não cortar o homem do meio e apenas escrever meus dados em XML Dados estruturados aqui significa Arrays Dictionaries Typed data (Integers, Dates) XML é apenas um formato de serialização. Você ainda precisa implementar a estrutura em cima disso. Além disso, se suas ferramentas podem aplicar o XML correto, isso não significa que eles podem impor a semântica de dados estruturados em cima. Os formatos de dados estruturados são tão poderosos quanto as ferramentas que você precisa para editá-los: especialmente quando você está criando um pouco de Dados como em um jogo maior ou aplicativo. Plists não são (apenas) XML. Se você tentar usar um editor XML convencional para criar um arquivo Plist, é provável que um leitor de plist wonapost seja capaz de lê-lo. Mesmo que o esquema seja de alguma forma, deve haver chaves e campos balanceados. Tudo isso se torna evidente se mais de uma pessoa estiver trabalhando no projeto. A menos que suas ferramentas possam criar dados estruturados reais (como um arquivo plist), seus contribuidores vão enviar arquivos que são inválidos, mesmo que eles possam estar OK como XML. Para abordar isso, você deve escrever uma tonelada de código de análise XML e rotinas de validação. Ou você pode simplesmente ler um Plist em seus objetos com algumas linhas de código. Outra razão para escolher Plist over raw XML é espaço e desempenho - o binário plist é pequeno e rápido. Enquanto você pode compactar XML, isso simplesmente torna flakey e lento para carregar em comparação com os plists binários. JSON é ótimo, especialmente para serializar dados na web. Isso funciona bastante bem para armazenar dados em arquivos, e há muitas bibliotecas de serialização JSON ao redor para ler e gravá-lo. Se você está muito familiarizado com o JSON e o usou para arquivos de configuração, provavelmente é uma boa opção para enviar dados com seu aplicativo. Há duas coisas que pensamos que fazem um vencedor sobre o JSON para aplicativos orientados por dados: primeiro é que o Plist possui um formato binário pequeno e rápido. O Plistinator garante que os arquivos de dados que você edita estão válidamente enquadrados. A maioria das ferramentas que podem editar o JSON permitem que você coloque qualquer coisa nas etiquetas e rótulos, para que você possa criar algo que não seja válido como um arquivo de dados em seu aplicativo. O destaque e o recuo da sintaxe podem ajudar a evitar erros de codificação JSON, mas ainda é fácil criar arquivos JSON corruptos - com chaves não compatíveis e assim por diante. Este tipo de erro de enquadramento é especialmente fácil para membros menos técnicos da sua equipe, que podem dizer níveis de edição em seu jogo ou trabalhar com ativos. Com o Plistinator, você ainda pode soletrar uma marca erroneamente ou inserir dados incorretos, mas pelo menos é garantido para ser um arquivo Plist válido. Seu código pode carregá-lo e mostrar um erro de nível de aplicativo em vez de um erro de análise obscuro JSON. Se você for um veterano JSON e pronto para lidar com a exceção de análise JSON temida em seu código, então vá para você. Mas os plists são uma boa escolha, e Plistinator está aqui para torná-los uma escolha amigável e poderosa. Para Plistinator, lidar com Plist com os seguintes tipos: Array Dictionary Boolean (true ou false) Number (pode ser real ou inteiro) Date String (utf-8) Existem algumas diferenças interessantes entre o formato binário e XML Binário tem um dado UID Tipo que é usado no Mac para serializar determinados tipos de dados binários principalmente em arquivos de preferência. O binário também possui um tipo nulo explícito. Raramente visto na natureza. O binário pode fazer um tipo de string ASCII, bem como a string UTF-8. Na prática, isso se torna apenas uma outra maneira em que o binário pode armazenar dados de forma mais compacta. UID: Plistinator pode ler isso e representa isso criando um único elemento Dictionary com o UID como um elemento filho número. Ao criar dados estruturados para um aplicativo, essa curiosidade pode ser ignorada. Nunca há um motivo para querer criar um UID: mas o Plistinator o suporta desta forma para que você possa ler os arquivos binários da Apple Mac se desejar. ASCII: Ao serializar para binário, o Plistinator examina as seqüências de caracteres e se elas podem ser armazenadas como ASCII quando o binário é solicitado, isso é feito, para economizar espaço e fazer cargas mais rápidas.

No comments:

Post a Comment