Netstring - Netstring
v programování, a síťový řetězec je metoda formátování pro bajtové řetězce který používá deklarativní notaci k označení velikosti řetězce.[1][2]
Netstrings ukládají délku bajtů následujících dat, což usnadňuje jednoznačné předávání textových a bajtových dat mezi programy, které mohou být citlivé na hodnoty, které lze interpretovat jako oddělovače nebo terminátory (například a nulový znak ).
Formát se skládá z délky řetězce zapsaného pomocí ASCII číslic, následovaných dvojtečkou, daty bajtů a čárkou. „Délka“ v tomto kontextu znamená „počet 8bitových jednotek“, takže pokud je řetězec například kódován pomocí UTF-8, to může nebo nemusí být totožné s počtem textových znaků, které jsou v řetězci.
Například text „ahoj svět!“ kóduje jako:
<31 32 3a 68 65 6c 6c 6f 20 77 6f 72 6c 64 21 2c>
tj.
12:Ahoj světe!,
A prázdný řetězec jako:
<30 3a 2c>
tj.
0:,
Čárka lidem usnadňuje čtení síťových řetězců, které se používají jako sousední záznamy, a poskytuje slabé ověření správné syntaktické analýzy. Bez čárky formát zrcadlí, jak Bencode kóduje řetězce.
Délka je psána bez úvodních nul. Prázdný řetězec je jediný síťový řetězec, který začíná nulou. Existuje přesně jeden legální síťový řetězec pro libovolné bajtový řetězec.
Vzhledem k tomu, že formát lze snadno generovat a vytvářet analyzovat, je snadné jej podpořit programy napsanými v různých programovacích jazycích. V praxi se síťové řetězce často používají ke zjednodušení výměny bytestringů nebo seznamů bytestringů. Viz například jeho použití v Jednoduché rozhraní společné brány (SCGI) a Quick Mail Queuing Protocol (QMQP).
Netstrings se vyhnou komplikacím, které vznikají při pokusu o vložení libovolných dat v oddělovaných formátech. Například XML nemusí obsahovat určité hodnoty bajtů a vyžaduje netriviální kombinaci unikající a vymezení, při generování vícedílné zprávy MIME zahrnuje výběr oddělovače, který nesmí být v rozporu s obsahem údajů.
Síťové řetězce lze ukládat rekurzivně. Výsledkem kódování sekvence řetězců je jeden řetězec. Přepisování výše uvedeného „ahoj svět!“ příklad místo toho být sekvence dvou síťových řetězců, sama zakódovaná jako jeden síťový řetězec, dává následující:
17:5:Ahoj,6:svět!,,
Analýza takového vnořeného síťového řetězce je příkladem kachní psaní, protože obsažený řetězec („5: ahoj, 6: svět !,“) je řetězec i posloupnost řetězců netstrings. Jeho efektivní typ je určen tím, jak se aplikace rozhodne jej interpretovat, nikoli žádným výslovným prohlášením typu požadovaným specifikací síťového řetězce. Obecně existují 3 způsoby, jak se program očekávající síťový řetězec může rozhodnout interpretovat jeho obsah:
- Jako text čitelný člověkem bez dalšího automatického zpracování
- Tak jako zapouzdřená data v některých předem připravených fixních serializace dat formát (například binární obsah struktury C nebo C ++)
- Jak zapouzdřený metadata a data pomocí a označená unie konvence k popisu typů vnořených řetězců sítě, čímž se vytvoří a popisující sebe hierarchický formát serializace dat. ("Označené síťové řetězce" a Bencode lze chápat jako rozšíření síťového řetězce, která podporují podobné hierarchické formáty, které samy popisují[3][4][5][6][7])
Vzhledem k tomu, že netstrings nepředstavují žádná omezení obsahu dat, která ukládají, nelze netstrings dosazovat doslovně do většiny formátů s oddělovači, aniž by bylo možné zasahovat do vymezení formátu, který obsahuje.
V kontextu síťového programování je potenciálně užitečné, aby byl přijímající program informován o velikosti dat, která následují přidělit přesně tolik paměti, vyvarujte se nutnosti přerozdělení, aby se vešlo více dat, a preventivně odmítněte data, která by byla překročit limity velikosti.
Viz také
Poznámky a odkazy
- ^ definováno v dokumentu uživatelem D. J. Bernstein.
- ^ Viz např. Webové programování v Pythonu Steve Holden, David M. Beazley Publikoval Sams Publishing, 2002ISBN 0-7357-1090-2, 978-0-7357-1090-0691 stran, strana 202.
- ^ Caolan McMahon."Bencoding".
- ^ "Specifikace TNetstrings". Archivovány od originál dne 10.02.2014.
- ^ tnetstring-rb
- ^ "tnetstring: označená specifikace netstringu"
- ^ "tnetstring: serializace dat pomocí zadaných netstrings"