Plist format opcje binarne


Próbuję wyświetlać listę wyników wyszukiwania w mojej aplikacji na iPhone'a. Serwer jest prototypem napisanym w języku Python. Najpierw znalazłem wbudowany w Pythony plistlib, który jest niesamowity. Chcę podać strzał w wynik wyszukiwania, więc potrzebuję go, aby był jak najmniejszy, a xml był zbyt duży. Binarny format plistów wydaje się być dobrym wyborem. Niestety plistlib nie robi plików binarnych, więc idź w górę PyObjC. (Segue: Jestem bardzo otwarty na wszelkie inne pomysły dotyczące przeprowadzania wyszukiwania na żywo.) Zmniejszyłem ilość danych w miarę możliwości, włączając tylko wyświetlanie wystarczających wyników, aby wypełnić okno klawiaturą iPhone'a w górę, która wynosi 5.) Niestety, chociaż znam Pythona i jestem całkiem przyzwoity z Cocoa, nadal nie dostaję PyObjC. Jest to odpowiednik Cocoa tego, co chcę zrobić: Myślałem, że powinienem móc zrobić coś takiego, ale dataWithPropertyList nie znajduje się na liście dir () obiektów NSPropertyListSerialization. Powinienem też prawdopodobnie przekonwertować listę na NSArray. Próbowałem dokumentacji PyObjC, ale jest tak styczny do mojej prawdziwej pracy, że myślałem, że próbuję również SO SOS. Tak właśnie czytam w paskach po stronie iPhone'a. Chętnie wyjaśnimy, czy coś z tego nie ma sensu. Przekierowywanie paczek Binarnych Plikty binarne to pliki używane przez produkty Apple do przechowywania informacji. Najprostszym sposobem ich wyświetlenia jest przekonwertowanie ich do formatu XML. Zauważ, że dane binarne w pliku plist XML są konwertowane w base64 i dlatego ciągi znaków w danych binarnych nie są bezpośrednio widoczne. Program plutil jest natywny dla Mac OS X (od 10.2), jednak jest również dołączony, gdy iTunes jest zainstalowany na komputerze z systemem Windows. W bibliotece libplist 1 znajduje się również odpowiednik plutila. plutil na komputerze z systemem Windows jest przechowywany w: Które można dodać do zmiennej PATH w zmiennych środowiskowych, więc plutil można uruchomić z dowolnego miejsca. Jeśli chcesz skopiować plik wykonywalny plutil do innego katalogu, to wymaga to kilku bibliotek DLL. Te biblioteki DLL to: ASL, CFNetwork, CoreFoundation, Foundation, icudt46, libdispatch, libicuin, libicuuc, libtidy, libxml2, objc, ptheadVC2, SQLite3 i zlib. Wszystkie znajdują się w folderze wsparcia aplikacji Apple wraz z plikiem plutil. exe. Aby przekonwertować pliki binarne na XML, należy uruchomić polecenie: Lub z libplist External LinksProperty ListBinary Binarny format listy właściwości jest jednym z kilku formatów używanych w plikach plist. standardowe środki dla aplikacji w systemach operacyjnych pochodzących od NeXTSTEP (łącznie z obecnymi systemami Apple) w celu przechowywania danych konfiguracyjnych. Format binarny został wprowadzony niedawno niż inne formaty, ale teraz jest domyślny dla systemów Apple. Opis formatu Dostępne typy W pliku binarnym dostępne są następujące typy: singleton (boolean, null, fill) integer data float dane binarne łańcuch jednobajtowy łańcuch dwubajtowy Słownik tablic UID Sekcje plików Plik binarny plist składa się z czterech sekcji: pierwszych 8 bajtów są identyfikatorem, równym bplistXX gdzie XX to dwie cyfry. bplist00 i bplist01 są znane, nie znam różnic. Drugi to wszystkie elementy w plist, kodowane i łączone. Trzeci to połączenie przesunięć wszystkich elementów w pliku plist, każde przesunięcie podane jako liczba całkowita bez znaku w stałej liczbie bajtów. Obiekt w pliku plist ma numer referencyjny oparty na indeksowaniu tej tabeli opartym na 0, np. numer obiektu 0 jest obiektem w przesunięciu podanym jako pierwszy w tej tabeli. Ostatnie 32 bajty, sekcja z przyczepą. Ostateczne 32 bajty binarnego plist mają następujący format: 6 bajtów x00 wypełnienie 1-bajtowej liczby całkowitej, która jest liczbą bajtów dla wartości przesunięcia. Poprawne wartości to 1, 2, 3 lub 4. Wartości przesunięcia są zakodowane jako niepodpisane, duże endianiczne liczby całkowite. Musi być wystarczająco szeroki, aby zakodować przesunięcie tabeli przesunięcia, a nie tylko najwyższy offset obiektu. 1-bajtowa liczba całkowita, która jest liczbą bajtów dla numeru referencyjnego obiektu. Poprawne wartości to 1 lub 2. Numery referencyjne są zakodowane jako niepodpisane, duże endianiczne liczby całkowite. 4 bajty x00 wypełnienie 4-bajtowej liczby całkowitej, która jest liczbą obiektów w plistu 4 bajtów x00 wypełnienia 4-bajtowej liczby całkowitej, która jest numerem referencyjnym obiektu głównego w pliku plist. Zazwyczaj jest to zero. 4 bajty x00 wypełnienie 4-bajtowej liczby całkowitej, która jest przesunięciem w pliku początku tabeli przesunięcia, nazwanym powyżej jako trzeci element w binarnym pliście Kodowanie obiektu Kodowanie dostępnych typów jest następujące: Pierwsze cztery bity to numer identyfikacyjny typu obiektu, zgodnie z następującym mapowaniem: 0x0 singleton 0x1 liczba całkowita 0x2 float 0x3 data 0x4 dane binarne 0x5 pojedynczy bajt ciąg 0x6 double bajtowy ciąg 0x8 UID 0xa array 0xd słownik Cztery kolejne bity są wielkością obiektu . Jeśli podana wartość wynosi 15, oznacza to, że rzeczywisty rozmiar obiektu jest większy niż można wyrazić w czterech bitach. W tym przypadku następny bajt jest początkiem prawdziwego rozmiaru, zakodowanego tak jak obiekty całkowite, z wyjątkiem tego, że wartość jest niepodpisana. Nie dotyczy to obiektów typu 0x0, patrz niżej szczegóły. Odwołuję się do tej wartości jako długości obiektu. Kodowanie pozostałej części obiektu zależy od typu. Długość bajtów to liczba bajtów użytych do zakodowania obiektu, nie licząc kodowania numeru typu i długości obiektu, które zostały już omówione. Numer typu 0x0 grupuje razem wartości logiczne, wartość pustą i coś, co nazywa się wypełnieniem przez plutil. pl. Nie wiem, do czego służy wypełnienie. Długość obiektu jest w rzeczywistości wartością obiektu, a długość bajtu jest zawsze równa zero. Wartość 0 oznacza zero, 8 oznacza False, 9 oznacza True, a 15 oznacza wypełnienie. Każda inna wartość jest nieprawidłowa. Długość bajtu jest równa 2 do potęgi długości obiektu. Prawidłowe długości obiektów to odpowiednio 0, 1, 2 i 3 dla 1, 2, 4 i 8 bajtów. Kodowanie jest jak big-endian, liczba całkowita ze znakiem w odpowiedniej liczbie bajtów. Konwersja długości obiektu do długości bajtów jest taka sama jak w przypadku liczb całkowitych. Długość obiektu wynosi 2 lub 3, co odpowiada długości bajtu równej 4 lub 8. Kodowanie jest odpowiednio zgodne z metodą big-endian, pojedynczej precyzji lub podwójnej precyzji. Daty są przechowywane jako liczba zmiennoprzecinkowa z wartością sekund od epoki z 1 stycznia 2001, 0:00:00 GMT. Kodowanie jest takie samo, jak kodowanie dla elementów pływających, z tym wyjątkiem, że długość obiektu wynosi zawsze 3, dla długości bajta równej 8. Dane binarne Długość bajtów to długość obiektu i każda wartość jest poprawna. Bajty nie są interpretowane. Ciąg pojedynczego bajtu Długość bajtu to długość obiektu i każda wartość jest poprawna. Kodowanie to ASCII. Ciąg podwójnego bajtu Długość bajtu jest dwukrotnie większa od długości obiektu i każda wartość jest poprawna. Kodowanie to utf-16 (big endian). Kodowanie jest jak liczby całkowite, z wyjątkiem wartości, które nie są podpisane. Są one szeroko stosowane w plikach napisanych przy użyciu NSKeyedArchiver, serializera dla obiektów Objective-C. Wartość UID wydaje się być indeksem wartości na liście obiektów wewnątrz takiego pliku plist. Długość bajtowa jest długością obiektu razy liczbę bajtów na odwołanie do obiektu dla tego pliku plist, tj. Jedną lub dwie razy długość obiektu. Dowolna długość obiektu jest ważna. Kodowanie jest połączeniem numerów referencyjnych obiektów jako niepodpisane, wielko-endowe liczby całkowite, zakodowane w liczbie bajtów na odwołanie do obiektu dla tego pliku plist. Słownik Długość bajtu jest dwukrotnie większa od długości obiektu razy liczba bajtów na odwołanie do obiektu. Kodowanie jest jak połączenie dwóch zakodowanych tablic, pierwszego z kluczy i drugiego z wartości. Pierwsza wartość na liście kluczy odpowiada pierwszej wartości na liście wartości i tak dalej. Uwagi końcowe Podczas pisania binarnego pliku plist, wszystkie wartości, które powtarzają się w pliku, powinny być zakodowane tylko raz i ten pojedynczy obiekt, do którego odnosi się kiedykolwiek powtarza się ta wartość. Inne linki

Comments

Popular posts from this blog

Secrets to successful forex trading pdf

Moving average chart vba

No stop hedged grid forex trading system