Кіріспе

Деректерді серияландыру форматы
Bencode (айтылуы Bee encode) – BitTorrent пір-пір файл алмасу жүйесінің құрылымдық емес деректерді сақтау және тарату үшін қолданатын кодтамасы. Ол төрт түрлі дерек типін қолдайды:
байт тізбектері,
бүтін сандар,
тізімдер және
сөздіктер (ассоциативтік массивтер). Bencode көбінесе торрент файлдарында қолданылады, сондықтан ол BitTorrent спецификациясының бір бөлігі болып табылады. Бұл метадеректер файлдары – жай ғана кодталған сөздіктер. Bencode қарапайым және (сандар ондық санау жүйесінде мәтін түрінде кодталғандықтан) ендиандыққа тәуелсіз, бұл BitTorrent сияқты көп платформалы қолданба үшін маңызды. Ол сондай-ақ, қолданбалар күтпеген сөздік кілттерін назарға алмаса, жетілдірілген, сондықтан жаңа кілттерді үйлесімсіздіктер тудырмай қосуға болады.

Кодтау алгоритмі

Bencode ASCII таңбаларын айырғыштар және сандар ретінде пайдаланады. Бүтін сан i<ондық базада кодталған бүтін сан>e түрінде кодталады. Бастапқы нөлдерге рұқсат етілмейді (бірақ нөл саны әлі де "0" ретінде көрсетіледі). Теріс мәндер санның алдына минус таңбасы қою арқылы кодталады. Мысалы, 42 саны , 0 саны , ал -42 саны ретінде кодталады, себебі теріс нөлге рұқсат етілмейді. Байт тізбегі (байттардың тізбегі, міндетті түрде символдар емес) <ұзындығы>:<мазмұны> түрінде кодталады. Ұзындығы 10-дық базада кодталған, бүтін сандар сияқты, бірақ теріс емес болуы керек (нөлге рұқсат етіледі); мазмұны – тізбекті құрайтын байттар. "spam" деген жол ретінде кодталады. Спецификация ASCII жиынтығынан тыс символдарды кодтаумен айналыспайды; мұны азайту үшін кейбір BitTorrent қолданбалары кодтауды (көбінесе UTF-8) әртүрлі стандартты емес жолдармен нақты көрсетеді. Бұл netstrings-тің жұмыс істеу принципімен бірдей, бірақ netstrings байт тізбегінен кейін қосымша үтірлі суффикс қосады. Мәндердің тізімі l<мазмұны>e түрінде кодталады. Мазмұны – тізімнің bencode форматта кодталған элементтері, реті бойынша біріктірілген. "spam" жолы мен 42 санын қамтитын тізім мынадай кодталады: Элементтер арасында бөлігіштердің жоқтығына және бірінші таңбаның "1" емес, "l" әрпі екеніне назар аударыңыз. Сөздік d<мазмұны>e түрінде кодталады. Сөздіктің элементтері әр кілттің мәнімен бірге кодталады. Барлық кілттер байт тізбегі болуы керек және лексикографиялық тәртіппен орналасуы керек. 42 және "spam" мәндерін "foo" және "bar" кілттерімен сәйкесінше байланыстыратын сөздік (яғни, ) келесідей кодталады: Тізімдер мен сөздіктерде қандай да бір мәндерді сақтауға шектеулер жоқ; олар басқа тізімдер мен сөздіктерді қамтуы мүмкін (әдетте солай болады). Бұл кез келген күрделі дерек құрылымдарын кодтауға мүмкіндік береді.