Plist format binary options


Estou tentando exibir uma lista de propriedades de resultados de pesquisa para meu aplicativo para iPhone. O servidor é um protótipo, escrito em Python. Primeiro eu encontrei Pythons built-in plistlib, que é incrível. Eu quero dar um tiro de busca-como-você-tipo, então eu preciso que ele seja tão pequeno quanto possível, e xml era muito grande. O formato plist binário parece uma boa escolha. Infelizmente plistlib doesnt fazer arquivos binários, então passo direito PyObjC. (Segue: Estou muito aberto a quaisquer outros pensamentos sobre como realizar a pesquisa ao vivo. Eu já reduziu os dados, tanto quanto possível, incluindo apenas exibindo resultados suficientes para preencher a janela com o teclado do iPhone para cima, que é 5.) Infelizmente, Embora eu saiba Python e estou ficando bastante decente com o cacau, eu ainda não consigo PyObjC. Este é o equivalente de cacau do que eu quero fazer: Eu pensei que eu deveria ser capaz de fazer algo parecido com isso, mas dataWithPropertyList isnt na lista de diretórios de objetos NSPropertyListSerialization (). Eu provavelmente também deve converter a lista para NSArray. Eu tentei os documentos PyObjC, mas é tão tangente ao meu trabalho real que eu pensei Id tentar um SO SOS, também. Isto é como Im que lêem no plist no lado do iPhone. Feliz em esclarecer se qualquer um destes não faz sentido. Plistlib 8212 Gerar e analisar arquivos. plist do Mac OS X Este módulo fornece uma interface para ler e gravar os arquivos 8220property list8221 usados ​​principalmente pelo Mac OS X e suporta arquivos binários e plist XML. O formato de lista de propriedades (.plist) é uma serialização simples que suporta tipos básicos de objetos, como dicionários, listas, números e strings. Geralmente, o objeto de nível superior é um dicionário. Para escrever e analisar um arquivo plist, use as funções dump () e load (). Para trabalhar com dados plist em objetos bytes, use dumps () e loads (). Valores podem ser strings, inteiros, floats, booleanos, tuplas, listas, dicionários (mas somente com chaves de string), Data. Bytes. Bytesarray ou datetime. datetime. Alterado na versão 3.4: Nova API, antiga API desaconselhada. Suporte para plists formato binário adicionado. PList manual page Apple8217s documentação do formato de arquivo. Este módulo define as seguintes funções: Ler um arquivo plist. Fp deve ser um objeto de arquivo legível e binário. Retorna o objeto raiz descompactado (que geralmente é um dicionário). O fmt é o formato do arquivo e os seguintes valores são válidos: Se usebuiltintypes for true (o padrão) os dados binários serão retornados como instâncias de bytes. Caso contrário ele é retornado como instâncias de Dados. O dicttype é o tipo usado para dicionários que são lidos do arquivo plist. A estrutura exata do plist pode ser recuperada usando collections. OrderedDict (embora a ordem das chaves shouldn8217t seja importante em arquivos plist). Os dados XML para o formato FMTXML são analisados ​​usando o analisador Expat de xml. parsers. expat 8211 veja sua documentação para possíveis exceções no XML mal formado. Elementos desconhecidos simplesmente serão ignorados pelo analisador plist. O analisador para o formato binário aumenta InvalidFileException quando o arquivo não pode ser analisado. Novo na versão 3.4. Carregar um plist de um objeto bytes. Veja load () para uma explicação dos argumentos de palavra-chave. Novo na versão 3.4. Escreva valor para um arquivo plist. Fp deve ser um arquivo, arquivo binário objeto. O argumento fmt especifica o formato do arquivo plist e pode ser um dos seguintes valores: Quando sortkeys for true (o padrão) as chaves para dicionários serão gravadas no plist em ordem classificada, caso contrário elas serão escritas na ordem de iteração Do dicionário. Quando skipkeys é false (o padrão) a função aumenta TypeError quando uma chave de um dicionário não é uma seqüência, caso contrário, essas chaves são ignoradas. Um TypeError será gerado se o objeto for de um tipo não suportado ou um contêiner que contém objetos de tipos não suportados. Um OverflowError será gerado para valores inteiros que não podem ser representados em arquivos plist (binários). Novo na versão 3.4. Retorna o valor como um objeto de bytes plist-formatado. Consulte a documentação para dump () para obter uma explicação dos argumentos de palavras-chave dessa função. Novo na versão 3.4. As seguintes funções estão obsoletas: plistlib. ReadPlist (pathOrFile) Ler um arquivo plist. PathOrFile pode ser um nome de arquivo ou um objeto de arquivo (legível e binário). Retorna o objeto raiz descompactado (que geralmente é um dicionário). Esta função chama load () para fazer o trabalho real, consulte a documentação dessa função para obter uma explicação dos argumentos de palavra-chave. Os valores de Dict no resultado têm um método getattr que difere para getitem. Isso significa que você pode usar o acesso ao atributo para acessar itens desses dicionários. Deprecated desde a versão 3.4: Use load () em vez disso. Plistlib. WritePlist (rootObject. PathOrFile) Escreva rootObject para um arquivo plist XML. PathOrFile pode ser um nome de arquivo ou um objeto de arquivo (gravável e binário) Deprecated desde a versão 3.4: Use dump () em vez disso. Plistlib. ReadPlistFromBytes (dados) Ler dados plist de um objeto bytes. Retorna o objeto raiz. Veja load () para uma descrição dos argumentos de palavra-chave. Os valores de Dict no resultado têm um método getattr que difere para getitem. Isso significa que você pode usar o acesso ao atributo para acessar itens desses dicionários. Deprecated desde a versão 3.4: Use loads () em vez disso. Plistlib. WritePlistToBytes (rootObject) Retorna o objeto rootObject como um objeto de bytes XML plist-formatado. Deprecated desde a versão 3.4: Use dumps () em vez disso. As classes a seguir estão disponíveis: Retorna um objeto de mapeamento estendido com o mesmo valor que dicionário dicionário. Esta classe é uma subclasse de dict onde o acesso de atributo pode ser usado para acessar itens. Ou seja, aDict. key é o mesmo que umDictkey para obter, definir e excluir itens no mapeamento. Desatualizado desde a versão 3.0. Retorna um objeto wrapper 8220data8221 em torno dos dados do objeto bytes. Isso é usado em funções de conversão de / para plists para representar o tipo ltdatagt disponível em plists. Tem um atributo, dados. Que pode ser usado para recuperar o objeto bytes Python armazenado nele. Deprecated desde a versão 3.4: Use um objeto bytes em vez disso. As constantes a seguir estão disponíveis: O formato XML para plist files. Property List / Binary O formato de lista de propriedades binárias é um dos vários formatos que foram usados ​​para arquivos plist. Os meios padrão para aplicações em sistemas operacionais descendentes de NeXTSTEP (incluindo OSs atuais da 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 tipos a seguir estão disponíveis em um plist binário: singleton (boolean, null, fill) inteiro data do float dados binários seqüência de bytes simples string de bytes duplos Dicionário de array UID Seções de arquivo Um arquivo plist binário tem quatro seções: São um identificador, igual a bplistXX onde XX é dois dígitos. Bplist00 e bplist01 são conhecidos, eu não sei as diferenças. Em segundo lugar está todos os elementos no plist, codificados e concatenados. Terceiro é a concatenação dos deslocamentos de todos os elementos no plist, cada deslocamento dado como um inteiro sem sinal em um número fixo de bytes. Um objeto no plist tem um número de referência que é baseado na indexação baseada em 0 desta tabela, p. O objeto número 0 é o objeto no deslocamento dado primeiro nesta tabela. Os 32 bytes finais, a seção de reboque. Trailer Os 32 bytes finais de um plist binário têm o seguinte formato: 6 bytes de x00 padding 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 endian. Deve ser amplo o suficiente para codificar o deslocamento da tabela de deslocamento, 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 do 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 endian. 4 bytes de x00 padding um inteiro de 4 bytes que é o número de objetos no plist 4 bytes de x00 padding um inteiro de 4 bytes que é o número de referência do objeto raiz no plist. Normalmente é zero. 4 bytes de x00 padding um inteiro de 4 bytes que é o deslocamento no arquivo do início da tabela de deslocamento, nomeado acima como o terceiro elemento em um plist binário Codificação de objeto A codificação dos tipos disponíveis são as seguintes: Os primeiros quatro bits São um número de identificação do tipo de objeto, de acordo com o seguinte mapeamento: 0x0 singleton 0x1 inteiro 0x2 float 0x3 data 0x4 dados binários 0x5 byte único seqüência de caracteres 0x6 byte duplo seqüência de caracteres 0x8 UID 0xa array 0xd dicionário O segundo 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 verdadeiro, codificado como os inteiros objetos, exceto o valor é unsigned. Este não é o caso para objectos de tipo 0x0 no entanto, consulte abaixo para obter detalhes. Vou me referir a esse 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 número de identificação do tipo e comprimento do objeto já discutido. Singleton O número do tipo 0x0 agrupa valores booleanos, um valor nulo e algo chamado preenchimento por plutil. pl. Eu não sei o que é preencher. O comprimento do objeto é, na verdade, o valor do objeto, eo 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. Inteiro O comprimento do byte é igual a 2 à potência do comprimento do objeto. Comprimentos de objeto válidos são 0, 1, 2 e 3 para 1, 2, 4 e 8 bytes inteiros, respectivamente. A codificação é como um inteiro big-endian, assinado no número apropriado de bytes. Float A conversão de comprimento de objeto para byte é a mesma que para inteiros. O comprimento do objeto é 2 ou 3, correspondente a um comprimento de byte de 4 ou 8. A codificação é como um big-endian, de precisão única ou uma flutuação de dupla precisão, de acordo. Data Datas são armazenadas como um flutuador com um valor de segundos desde a época de 1 de Janeiro de 2001, 0:00:00 GMT. A codificação é a mesma que a codificação para os 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. Single Byte String O comprimento do byte é o comprimento do objeto, e qualquer valor é válido. A codificação é ASCII. Double Byte String O comprimento do byte é duas vezes o comprimento do objeto, e qualquer valor é válido. A codificação é utf-16 (big endian). Codificação UID é como inteiros, exceto valores são unsigned. 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 um plist. Array O comprimento do byte é o comprimento do objeto vezes o número de bytes por referência do objeto para este arquivo plist, ou seja, um ou dois vezes o comprimento do objeto. Qualquer comprimento de objeto é válido. A codificação é a concatenação de números de referência de objeto como números inteiros não assinados, big-endian, cada um codificado no número de bytes por referência de objeto para esse arquivo plist. Dicionário O comprimento do byte é duas vezes o comprimento do objeto vezes o número de bytes por referência do objeto. A codificação é como a concatenação de dois arrays codificados, o primeiro de chaves e o segundo de 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, quaisquer valores que se repetem dentro do arquivo devem ser codificados apenas uma vez e esse único objeto referenciado onde sempre esse valor se repete. Software Outros linksConvert Property List (plist) Entre formatos binários e XML Você já abriu um arquivo plist fora do Xcode usando um editor de texto e encontrou algo parecido com isto: Quando o que você realmente queria era algo mais parecido com isto: Começando com o Mac OS X Tiger, os arquivos plist agora são armazenados em um formato binário (versus XML). Para a maior parte isso é transparente no seu desenvolvimento diário, no entanto, se você usar scripts ou outras ferramentas para ler e / ou atualizar um plist, isso pode ser um problema. A boa notícia é que existe um utilitário para converter entre formatos plist binário e XML. O seguinte irá converter um arquivo plist binário (com o nome 8216Info. plist) para o formato XML: plutil - convert xml1 Info. plist Faça as alterações que você precisa e, em seguida, para converter de volta para binário: plutil - convert binary1 Info. plist obrigado As informações, eu fiz um Sublime Text plugin com este snippet de código chamado 8220Plist Binary8221. Você pode obtê-lo através do controle de pacote wbond8217s ou github: github / relikd / Plist-BinarysublimePlistinator Plistinator é feito para editar arquivos Plist Se você já sabe exatamente o que você precisa, em seguida, Plistinator está pronto para esmagar seu Plists para você. Plistinator é: Feito para o trabalho Lightweight Simples de usar Robust Powerful Crunches Amplificador binário Arquivos plist XML Em Mac, Windows Amp Melhorado Continuamente Se você já sabe que você precisa de uma ferramenta de edição Plist, grande Apenas a cabeça de nossa loja Gumroad e pegar Plistinator para Sua plataforma agora. Pensamos que Plist é um bom formato para dados estruturados para aplicativos em todas as plataformas. Melhor do que as alternativas. E quando você tem Plistinator torna-se um grande formato. Necessidade de convencer Ler em Plist é abreviação de Property List: é um formato de arquivo para armazenar dados estruturados. Plists são Open Source e foram em torno de cerca de tempo, enquanto a Internet. Plists são conhecidos por seu uso pela Apple em gadgets como o iPhone e no Mac. E acontece que eles funcionam bem em outras plataformas também. Veja abaixo os detalhes sujos dos formatos de armazenamento Plist. Plists são ideais para envio de dados com seus aplicativos, especialmente se esse doesnapost dados mudar muito. Se os dados no seu aplicativo estiver estruturado - por exemplo heierarchical -, em seguida, 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 de lista de propriedades Java XML - que canapost armazenar a estrutura profunda que um plist pode. Java lista de propriedades também donapost ter uma opção binária para o armazenamento eficiente de grandes conjuntos de dados. Estável. Itaposs tem sido em torno de idades. O local de nascimento do arquivo Plist era o NeXT Computer no final de 80aposs, onde tinha um formato baseado em texto. Os plists modernos de hoje, foram desenvolvidos pela Apple para o seu primeiro sistema operacional Mac OSX e foram em torno de 2000 ou assim, sobre o tempo JSON entrou em cena. Plists estão em muitos projetos Open Source, incluindo GnuSTEP e Darwin, e Appleaposs próprios projetos OpenSource. Plists Efficient são rápidos para ler e escrever, e rápido para configurar: geralmente é apenas um one-liner. 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. Planners estruturados podem fazer matrizes de ditos de booleanos, números, dicionários e matrizes de. Bem, você começa a idéia. Como os dicts podem mapear para seus objetos Plists são uma ótima maneira de inicializar objetos em seu aplicativo. Open Since Plist é um formato Open Source plists estão disponíveis para todas as plataformas, desde que queremos usá-los. Verifique a página de recursos de código plistinatoraposs para implementações plist da comunidade em C, C, Java, Python e outras linguagens. Arenapost plists apenas XML Por que não cortar o middle-man e basta escrever meus dados em XML Dados estruturados aqui significa Arrays Dicionários Dados digitados (Inteiros, Datas) XML é apenas um formato de serialização. Você ainda precisa implementar a estrutura em cima dela. Além disso, se suas ferramentas podem reforçar XML corretamente emoldurado, isso não significa que eles podem reforçar a semântica de dados estruturados em cima dele. Estruturado formatos de dados são tão poderosos como as ferramentas que você tem que editá-los: especialmente quando youaposre criando um pouco de Como em um jogo ou aplicativo maior. Plists não são (apenas) XML. Se você tentar usar um editor XML convencional para criar um arquivo Plist, seu provavelmente um leitor de plist será capaz de lê-lo. Mesmo se o esquema é de alguma forma certo, deve haver chaves e campos equilibrados. Isso tudo se torna óbvio se mais de uma pessoa estiver trabalhando no projeto. A menos que suas ferramentas possam criar dados reais estruturados (como um arquivo plist), então seus contribuidores vão enviar arquivos que são inválidos, mesmo que eles possam estar OK como XML. Para resolver isso você deve escrever uma tonelada de código de análise XML e rotinas de validação. Ou você pode apenas ler um Plist em seus objetos com um par de linhas de código. Outra razão para escolher Plist over raw XML é espaço e desempenho - plist binário é pequeno e rápido. Enquanto você pode compactar XML que apenas torna flakey e lento para carregar em comparação com plists binário. JSON é ótimo, especialmente para a serialização de dados na web. Ele funciona muito bem para armazenar dados em arquivos também, e há uma abundância de bibliotecas de serialização JSON em torno de ler e escrever. Se você está muito familiarizado com o JSON e usá-lo para arquivos de configuração, então provavelmente é uma boa opção para enviar dados com seu aplicativo. Há duas coisas que nós pensamos fazer Plist um vencedor sobre JSON para dados-driven apps: primeiro é que Plist tem um formato binário que é pequeno e rápido segundo é Plistinator certifica-se de que os arquivos de dados que você editar são validamente enquadrado. A maioria das ferramentas que podem editar o JSON permite que você coloque qualquer coisa nas etiquetas e rótulos, para que você possa criar algo que não é válido como um arquivo de dados para seu aplicativo. Sintaxe de destaque e recuo pode ajudar a evitar erros de codificação JSON, mas ainda é fácil de fazer arquivos corrompidos JSON - com chaves não-correspondentes e assim por diante. Este tipo de erro de enquadramento é especialmente fácil para os membros menos técnicos de sua equipe, que podem ser dizer níveis de edição em seu jogo ou trabalhar com ativos. Com Plistinator você ainda pode soletrar uma tag erroneamente ou inserir dados incorretos, mas pelo menos sua garantia de ser um arquivo válido Plist. Seu código pode carregá-lo e mostrar um erro de nível de aplicativo em vez de um erro de análise JSON obscuro. Se youaposre um veterano JSON e pronto para lidar com o temido JSON analisar exceção em seu código, então itaposs para você. Mas plists são uma boa escolha, e Plistinator está aqui para torná-los uma escolha amigável e poderosa. Para Plistinator lidamos 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 binário eo formato XML O binário tem um dado UID Tipo que é usado no Mac para serializar certos tipos de dados binários principalmente em arquivos de preferência. Binário também tem um tipo nulo explícito. Raramente visto na natureza. Binário pode fazer um tipo de seqüência de caracteres ASCII, bem como a seqüência de caracteres UTF-8. Na prática, isso se torna apenas uma outra maneira que o binário pode armazenar dados de uma forma mais compacta. UID: Plistinator pode lê-los e representa-lo criando um único elemento Dictionary com o UID como um elemento filho de número. Ao criar dados estruturados para um aplicativo, essa curiosidade pode ser ignorada. Nunca há uma razão para querer criar um UID: mas Plistinator suporta-lo desta forma para que você possa ler Apple Mac binário arquivos se você quiser. ASCII: Ao serializar para binário, Plistinator examina seqüências de caracteres e se eles podem ser armazenados como ASCII quando binário é solicitado isso é feito, para economizar espaço e fazer para cargas mais rápidas.

Comments

Popular posts from this blog

Forex sar vs php história

Moving average algorithm