XML jest dobrym wyborem, jeśli nie jesteś ograniczony przez rozmiar i jest obsługiwany natywnie (np. W .NET i Flash), ale jeśli chcesz mieć wąski format, możesz łatwo stworzyć własny format i analizator składni. Zwykle używam 1 znaku, np. przecinek, aby oddzielić każdy obiekt. Aby zdekodować ciąg, wykonaj podział przecinkiem. Teraz każdy obiekt potrzebuje różnych właściwości, więc oddziel je innym znakiem, np. Średnikiem, i użyj innego znaku, aby oddzielić nazwy właściwości od wartości właściwości, np. Dwukropek. W ten sposób wszystko można łatwo zdekodować bez wyrażenia regularnego za pomocą string.split. Oto przykład:
id:1;x:5;y:45.2;angle:45,id:28;x:56;y:89;angle:12;health:78
możesz zaoszczędzić jeszcze więcej miejsca, ograniczając nazwy właściwości do 1 znaku, np. h dla zdrowia. Na przykład.
i:1;x:5;y:45.2;a:45,i:28;x:56;y:89;a:12;h:78
Porównaj z alternatywą JSON:
{"o":[{"i":1, "x":5, "y":45.2, "a":45}, {"i":28, "x":56, "y":89, "a":12, "h":78}]}
Ponadto, jeśli chcesz zmniejszyć rozmiar swoich liczb, możesz je zakodować przy użyciu pełnego zestawu drukowalnych znaków UTF16. Ten wątek zainspirował mnie do zadania pytania na temat przepełnienia stosu, ile danych można spakować w jedną postać na ekranie . Odpowiedź wydaje się być gdzieś ponad 40 000 wartości dla liczby całkowitej, jeśli nie masz nic przeciwko posiadaniu elementów Brail, Kanji i szachów: ♔♕♖♗♘♙♚♛♜♝♞♟
Aby uzyskać dalsze zmniejszenie rozmiaru, możesz użyć kolejności odczytu / zapisu, aby określić, która wartość jest która, więc pierwsze dwa znaki reprezentują identyfikator, następne dwa to pozycja x, następne dwa y, następnie kąt, a następnie zdrowie itd. Więc:
F5DGP@%&002DFTK#OP1F
może przechowywać wszystkie te same informacje, co inne przykłady.
Siatki kafelków można przechowywać jako ciąg znaków, a każdy znak reprezentuje inny typ kafelka, np .:
i789pog5h3kl
gdzie mógłbym oznaczać lawę, 9 znaczy trawę itp