Monday 26 June 2017

Plist Format Binär Optionen


Ich versuche, eine Eigenschaft Liste der Suchergebnisse zu meiner iPhone App zu dienen. Der Server ist ein Prototyp, geschrieben in Python. Zuerst fand ich Pythons eingebaute Plistlib, was genial ist. Ich möchte suchen-wie-Sie-Typ ein Schuss, so dass ich es brauchen, um so klein wie möglich zu sein, und xml war zu groß. Das binäre Plist-Format scheint eine gute Wahl zu sein. Leider macht plistlib keine Binärdateien, also schritt nach oben PyObjC. (Segue: Im sehr offen für alle anderen Gedanken, wie man Live-Suche zu erreichen. Ich habe schon die Daten so weit wie möglich, aber nur genug Ergebnisse, um das Fenster mit dem iPhone-Tastatur zu füllen, was ist 5.) Leider, Obwohl ich Python kenne und mich mit Cocoa ziemlich anständig bekomme, bekomme ich immer noch nicht PyObjC. Dies ist das Kakao-Äquivalent von dem, was ich tun möchte: Ich dachte, ich sollte in der Lage sein, so etwas zu tun, aber dataWithPropertyList ist nicht in der NSPropertyListSerialization Objekte dir () Auflistung. Ich sollte auch wahrscheinlich die Liste in NSArray umwandeln. Ich habe die PyObjC-Docs ausprobiert, aber es ist so tangential zu meiner wirklichen Arbeit, dass ich dachte, Id versuchen ein SO SOS auch. Dies ist, wie ich im Plist auf der iPhone-Seite lese. Glücklich zu klären, wenn irgendjemand dies nicht sinnvoll macht. Property ListBinary Das binäre Eigenschaft Listenformat ist eines von mehreren Formaten, die für Plist-Dateien verwendet wurden. Die Standard-Mittel für Anwendungen unter Betriebssystemen, die von NeXTSTEP (einschließlich der aktuellen Apple OSs) abgesenkt wurden, um Konfigurationsdaten zu speichern. Das Binärformat wurde vor kurzem als die anderen Formate eingeführt, ist aber jetzt die Vorgabe für Apple-Systeme. Format Beschreibung Verfügbare Typen Die folgenden Typen sind in einem binären Plist verfügbar: Singleton (boolean, null, fill) Integer Float Datum Binärdaten Single Byte String Doppelte Byte String UID Array Wörterbuch Datei Sektionen Eine binäre Plist Datei hat vier Abschnitte: Die ersten 8 Bytes Sind eine Kennung, gleich bplistXX wobei XX zwei Ziffern ist. Bplist00 und bplist01 sind bekannt, ich kenne die Unterschiede nicht. Zweitens sind alle Elemente in der Pliste, codiert und verkettet. Drittens ist die Verkettung der Offsets aller Elemente im Plist, wobei jeder Offset als unsigned Integer in einer festen Anzahl von Bytes angegeben ist. Ein Objekt im Plist hat eine Referenznummer, die auf der 0-basierten Indizierung dieser Tabelle basiert, z. B. Objektnummer 0 ist das Objekt bei der Versetzung zuerst in dieser Tabelle gegeben. Die letzten 32 Bytes, die Trailer-Sektion. Die letzten 32 Bytes eines Binärplus haben folgendes Format: 6 Bytes von x00 padding eine 1 Byte Integer, die die Anzahl der Bytes für einen Offsetwert ist. Gültige Werte sind 1, 2, 3 oder 4. Offsetwerte werden als unsigned, big endian integers codiert. Muss reich genug sein, um den Offset der Offset-Tabelle zu kodieren, nicht nur den höchsten Objektversatz. Eine 1 Byte ganze Zahl, die die Anzahl der Bytes für eine Objektreferenznummer ist. Gültige Werte sind 1 oder 2. Referenznummern werden als unsigned, big endian integers codiert. 4 Bytes von x00 padding eine 4-Byte-Integer, die die Anzahl der Objekte in der plist 4 Bytes von x00 padding eine 4-Byte-Integer, die die Referenznummer des Wurzelobjekts in der Pliste ist. Das ist normalerweise null. 4 Bytes von x00 padding eine 4 Byte Integer, die die Versetzung in der Datei des Anfangs der Offset-Tabelle, oben genannt als das dritte Element in einem binären Plist Objektcodierung Die Codierung der verfügbaren Typen sind wie folgt: Die ersten vier Bits Sind eine ID-Nummer des Objekttyps nach folgendem Mapping: 0x0 Singleton 0x1 Integer 0x2 Float 0x3 Datum 0x4 Binärdaten 0x5 Single Byte String 0x6 Double Byte String 0x8 UID 0xa Array 0xd Wörterbuch Die zweiten vier Bits sind die Größe des Objekts . Wenn der angegebene Wert 15 ist, bedeutet dies, dass die wahre Objektgröße größer ist als in vier Bits ausgedrückt werden kann. In diesem Fall ist das nächste Byte der Anfang der wahren Größe, die wie die Integer-Objekte codiert ist, außer dass der Wert unsigned ist. Dies ist bei 0x0-Objekten nicht der Fall, siehe unten für Details. Ich werde auf diesen Wert als Objektlänge verweisen. Die Kodierung für den Rest des Objekts variiert je nach Typ. Die Byte-Länge ist die Anzahl der Bytes, die beim Codieren des Objekts verwendet werden, wobei die Codierung der Typ-ID-Nummer und der Objektlänge, die bereits diskutiert wurde, nicht zählt. Typnummer 0x0 gruppiert zusammen boolesche Werte, einen Nullwert und etwas namens Füllung von plutil. pl. Ich weiß nicht, was Füllung ist. Die Objektlänge ist eigentlich der Wert des Objekts, und die Bytelänge ist immer Null. Ein Wert von 0 bedeutet null, 8 bedeutet falsch, 9 bedeutet wahr und 15 bedeutet füllen. Jeder andere Wert ist ungültig. Die Bytelänge ist gleich 2 für die Leistung der Objektlänge. Gültige Objektlängen sind 0, 1, 2 und 3 für 1, 2, 4 und 8 Byte ganze Zahlen. Die Codierung ist als Big-Endian, signierte Ganzzahl in der entsprechenden Anzahl von Bytes. Die Objektlänge zu Bytelängenumwandlung ist die gleiche wie bei Ganzzahlen. Die Objektlänge beträgt 2 oder 3, entsprechend einer Byte-Länge von 4 oder 8. Die Codierung ist dementsprechend ein Big-Endian-, Single-Precision - oder Double-Precision-Float. Die Daten werden als Schwimmer mit einem Wert von Sekunden seit der Epoche vom 1. Januar 2001, 0:00:00 GMT gespeichert. Die Codierung ist die gleiche wie die Codierung für Floats, außer dass die Objektlänge immer 3 ist, für eine Byte Länge von 8. Binärdaten Die Bytelänge ist die Objektlänge und jeder Wert ist gültig. Die Bytes werden nicht interpretiert. Single Byte String Die Byte Länge ist die Objektlänge und jeder Wert ist gültig. Encoding ist ASCII. Double Byte String Die Byte Länge ist doppelt so lang wie die Objektlänge und jeder Wert ist gültig. Die Kodierung ist utf-16 (big endian). Encoding ist als Ganzzahl, außer Werte sind unsigned. Diese werden weitgehend in Dateien verwendet, die mit NSKeyedArchiver, einem Serializer für Objective-C-Objekte, geschrieben wurden. Der UID-Wert scheint der Index eines Wertes innerhalb der Objektliste innerhalb eines solchen Plists zu sein. Die Bytelänge ist die Objektlänge mal die Anzahl der Bytes pro Objektreferenz für diese Plistdatei, d. h. entweder das eine oder das Zweifache der Objektlänge. Jede Objektlänge ist gültig. Die Codierung ist die Verkettung von Objektreferenznummern als unsigned, big-endian-Integers, die jeweils in der Anzahl der Bytes pro Objektreferenz für diese Plist-Datei codiert sind. Wörterbuch Die Bytelänge ist zweimal die Objektlänge mal die Anzahl der Bytes pro Objektreferenz. Die Codierung ist wie die Verkettung von zwei codierten Arrays, die erste der Tasten und die zweite der Werte. Der erste Wert in der Schlüsselliste entspricht dem ersten Wert in der Liste der Werte und so weiter. Final Notes Beim Schreiben einer binären Plist-Datei sollten alle Werte, die sich innerhalb der Datei wiederholen, nur einmal codiert werden und das einzelne Objekt referenziert wird, wo immer dieser Wert wiederholt wird. Andere LinksConverting Binary Plists Binär Plists sind die Dateien, die Apple-Produkte verwenden, um Informationen zu speichern. Der einfachste Weg, sie zu sehen, ist, sie in XML zu konvertieren. Beachten Sie, dass binäre Daten in XML-Plist in base64 konvertiert werden und daher Strings in den Binärdaten nicht direkt sichtbar sind. Das Programm plutil ist nativ zu Mac OS X (ab 10.2), aber es ist auch enthalten, wenn iTunes auf einem Windows PC installiert ist. Auf linux libplist 1 gibt auch ein Äquivalent von plutil. Plutil auf einem Windows-PC ist gespeichert in: Welches kann hinzugefügt werden, um die PATH in Umgebungsvariablen so plutil kann von überall ausgeführt werden Wenn Sie möchten, kopieren Sie die plutil ausführbare Datei in ein anderes Verzeichnis erfordert es eine Reihe von DLLs zu funktionieren. Diese DLLs sind: ASL, CFNetwork, CoreFoundation, Foundation, icudt46, libdispatch, libicuin, libicuuc, libtidy, libxml2, objc, ptheadVC2, SQLite3 und zlib. Diese sind alle im Apple Application Support Ordner zusammen mit plutil. exe gefunden. Um Binär-Plisten in XML umzuwandeln, führen Sie den Befehl aus: Oder mit libplistischen External LinksPlistinator Plistinator ist für die Bearbeitung von Plist-Dateien gemacht Wenn Sie bereits genau wissen, was Sie brauchen, dann ist Plistinator bereit, Ihre Plists für Sie zu knacken. Plistinator ist: Für den Job gemacht Leichtgewichtig Einfach zu bedienen Robust Leistungsstarke Crunches Binär-Verstärker XML-Plist-Dateien Auf Mac, Windows-Verstärker Linux kontinuierlich verbessert Wenn Sie bereits wissen, dass Sie ein Plist-Bearbeitungs-Tool benötigen, klicken Sie einfach auf unseren Gumroad Store und holen Sie Plistinator für Ihre Plattform jetzt. Wir denken, Plist ist ein gutes Format für strukturierte Daten für Apps auf allen Plattformen. Besser als die Alternativen. Und wenn du Plistinator hast, wird es ein tolles Format. Benötigen Sie überzeugend Lesen Sie auf Plist ist kurz für Property List: Es ist ein Dateiformat für die Speicherung von strukturierten Daten. Plists sind Open Source und sind schon etwa so lange wie das Internet. Plists sind für ihre Verwendung von Apple in Gadgets wie das iPhone und auf dem Mac bekannt. Und es stellt sich heraus, dass sie auf anderen Plattformen auch gut funktionieren. Siehe unten für die verschmutzten Details der Plist-Speicherformate. Plisten sind ideal für den Versand von Daten mit Ihren Apps, vor allem, wenn diese Daten nicht viel ändern. Wenn die Daten in Ihrer App strukturiert sind - zum Beispiel heierarchisch - dann kann Plist eine bessere Wahl für die Datenpersistenz als eine Datenbank sein. Plisten sollten nicht mit der Java XML Property List Datei verwechselt werden - die canapost die tiefe Struktur speichern kann, die ein Plist kann. Java-Eigenschaftslisten auch donapost haben eine binäre Option für die effiziente Speicherung großer Datenmengen. Stabil. Itaposs war schon seit Ewigkeiten. Der Geburtsort der Plist-Datei war NeXT Computer im späten 80Koss, wo es ein textbasiertes Format hatte. Die modernen Plists von heute, wurden von Apple für seine erste Mac OSX-Betriebssystem entwickelt und gibt es seit 2000 oder so, über die Zeit, die JSON kam auf der Bühne. Plists sind in vielen Open Source-Projekten, darunter GnuSTEP und Darwin, und Appleaposs eigene OpenSource-Projekte. Effiziente Plists sind schnell zu lesen und zu schreiben, und schnell einzurichten: in der Regel ist es nur ein Ein-Liner. Das XML-Format ist menschlich lesbar (mehr oder weniger) und das Binärformat ist sehr platzsparend und schnell zu laden. Structured Plists können Arrays von Dicts von Booleans, Zahlen, Dicts und Arrays von machen. Nun, Sie bekommen die Idee. Da Dicts können auf Ihre Objekte Plots sind eine großartige Möglichkeit, um Objekte in Ihrer App zu initialisieren. Open Da Plist ist ein Open Source Format Plisse sind für alle Plattformen verfügbar, solange wir sie verwenden wollen. Check plistinatoraposs Code-Resource-Seite für Community-Plist-Implementierungen in C, C, Java, Python und anderen Sprachen. Arenapost plists nur XML Warum nicht ausschneiden den Mittelmann und schreibe einfach meine Daten in XML Structured Daten bedeutet hier Arrays Wörterbücher Typisierte Daten (Integers, Dates) XML ist nur ein Serialisierungsformat. Du musst immer noch die Struktur umsetzen. Darüber hinaus, wenn Ihre Werkzeuge korrekt gerahmtes XML erzwingen können, bedeutet das nicht, dass sie die strukturierte Daten-Semantik darüber hinaus erzwingen können. Strukturierte Datenformate sind nur so mächtig wie die Werkzeuge, die Sie bearbeiten müssen, vor allem, wenn youaposre, die ziemlich viel schaffen Daten wie in einem größeren Spiel oder App. Plists sind nicht (nur) XML. Wenn Sie versuchen, einen herkömmlichen XML-Editor zu verwenden, um eine Plist-Datei zu erstellen, ist es wahrscheinlich ein Plist-Reader, der es in der Lage ist, es zu lesen. Auch wenn das Schema irgendwie richtig ist, muss es ausgeglichene Schlüssel und Felder geben. Dies wird offensichtlich, wenn mehr als eine Person an dem Projekt arbeitet. Es sei denn, dass Ihre Werkzeuge tatsächliche strukturierte Daten (wie eine Plist-Datei) erstellen können, dann werden Ihre Mitwirkenden Dateien, die ungültig sind, einreichen, obwohl sie als XML korrekt sein könnten. Um dies zu adressieren, müssen Sie eine Tonne von XML-Parsing-Code und Validierungsroutinen schreiben. Oder du kannst einfach einen Plist in deine Objekte mit ein paar Zeilen Code lesen. Ein weiterer Grund zu wählen Plist über Roh-XML ist Raum und Leistung - plist binary ist klein und schnell. Während Sie XML komprimieren können, macht es einfach flakey und langsam zu laden im Vergleich zu binären Plisten. JSON ist großartig, vor allem für die Serialisierung von Daten über das Internet. Es funktioniert ganz gut für die Speicherung von Daten in Dateien als auch, und es gibt viele JSON Serialisierungsbibliotheken um zu lesen und zu schreiben. Wenn Sie mit JSON sehr vertraut sind und es für Konfigurationsdateien verwendet haben, dann ist es wahrscheinlich eine gute Wahl für den Versand von Daten mit Ihrer App. Es gibt zwei Dinge, die wir denken, dass Plist ein Gewinner über JSON für datengesteuerte Apps ist: Erstens ist das Plist ein binäres Format, das klein ist und schnell zweitens ist Plistinator stellt sicher, dass die Dateien, die Sie bearbeiten, gültig gerahmt werden. Die meisten Tools, die JSON bearbeiten können, erlauben es Ihnen, etwas in die Tags und Etiketten zu setzen, so dass Sie etwas erstellen können, das nicht als Datendatei für Ihre App gültig ist. Syntax-Hervorhebung und Einzug kann dazu beitragen, JSON-Codierungsfehler zu vermeiden, aber es ist immer noch leicht, korrupte JSON-Dateien zu machen - mit nicht passenden Klammern und so weiter. Diese Art von Framing-Fehler besonders einfach für weniger technische Mitglieder Ihres Teams, die sagen können, Bearbeiten Ebenen in Ihrem Spiel oder mit Vermögenswerten arbeiten. Mit Plistinator kannst du immer noch einen Tag falsch schreiben oder falsche Daten eingeben, aber zumindest garantiert es eine gültige Plist-Datei zu sein. Ihr Code kann es laden und einen Anwendungs-Level-Fehler anstelle eines obskuren JSON-Parse-Fehlers anzeigen. Wenn youaposre ein JSON Veteran und bereit, die gefürchtete JSON Parse Ausnahme in Ihrem Code zu behandeln, dann itaposs über Sie. Aber Plisten sind eine gute Wahl, und Plistinator ist hier, um ihnen eine freundliche und mächtige Wahl zu machen. Für Plistinator behandeln wir Plist mit den folgenden Typen: Array Dictionary Boolean (entweder true oder false) Number (kann real oder ganzzahlig sein) Date String (utf-8) Es gibt einige interessante Unterschiede zwischen dem Binär - und XML-Format Binary hat eine UID-Daten Typ, der auf Mac für die Serialisierung bestimmter Binärdatentypen hauptsächlich in Präferenzdateien verwendet wird. Binär hat auch eine explizite Nullart. Selten in der Wildnis gesehen Binär kann einen ASCII-String-Typ, sowie die UTF-8-String. In der Praxis wird dies nur eine andere Art und Weise, dass Binärdaten Daten kompakter speichern können. UID: Plistinator kann diese lesen und stellt sie dar, indem sie ein einzelnes Element Wörterbuch mit der UID als Zahlen-Kind-Element erstellt. Bei der Erstellung strukturierter Daten für eine App kann diese Neugier ignoriert werden. Es gibt nie einen Grund, eine UID zu erstellen, aber Plistinator unterstützt es auf diese Weise, damit du Apple Mac Binärdateien lesen kannst, wenn du willst. ASCII: Beim Serialisieren auf binär, untersucht Plistinator Strings und wenn sie als ASCII gespeichert werden können, wenn Binär gefragt wird, ist dies geschehen, um Platz zu sparen und für schnellere Lasten zu sorgen.

No comments:

Post a Comment