ЈаваСцрипт То је језик који добро управља низовима, али пошто је у почетку био дизајниран за руковање ХТМЛ документима, није баш добар у руковању бинарним подацима, у ствари ЈаваСцрипт нема бинарни тип података као такав, већ садржи само структуриране бројеве или врсте.
Као што већ знамо Ноде.јс је заснован на ЈаваСцрипт и може руковати текстуалним протоколима као што је ХТТП, где ово можете користити и за успостављање комуникације са базама података, манипулацију сликама, па чак и руковање датотекама, а због онога о чему смо говорили, ово само са низовима може бити прилично компликовано.
Али да би ови задаци бинарне манипулације били много лакши, Ноде.јс укључује имплементацију бинарног бафера, што нам омогућава да без већих проблема добијемо и поставимо бајте креираног бафера.
ЗахтевиЗа извођење вежби предложених у овом водичу морамо имати функционалну инсталацију Ноде.јс у нашем систему, можемо да погледамо овај водич пре него што наставимо да се упуштамо у њега. Такође је важно да имате приступ уређивачу обогаћеног текста за кодирање примера, можемо да користимо све што нам одговара, међутим, због једноставности употребе, препоручујемо Узвишени текст о НотеПад ++ који такође има додатке за синтаксу ЈаваСцрипт И ХТМЛ.
Креирање бафера
Да бисте креирали бафер, једноставно је направити нову инстанцу класе Бафер (). Да видимо како стварамо једноставан бафер заснован на УТФ-8 кодирању на следећи начин:
вар буф = нев Буффер ('Хелло ворлд!'); цонсоле.лог (буф);Наш пример ћемо извршити помоћу конзоле да бисмо видели одговор који нам даје Ноде.јс Што се тиче креирања нашег бафера:
Као што видимо штампамо ли нашу променљиву полирати, одговор можда није оно што смо очекивали, али морамо запамтити да стварамо инстанцу Буффер и оно што ова класа ради је кодирање њеног садржаја према специфичном кодирању знакова.
Такође можемо креирати низ бафера са другим кодирањима, који ће важити све док наведемо исто као други аргумент, да видимо:
вар буф2 = нови бафер ('9б38кте610ла', 'басе64'); цонсоле.лог (буф2);Као што видимо, кодирање можемо навести без икаквих проблема, да видимо које су врсте кодирања прихваћене и њихове одговарајуће идентификаторе:
асции - АСЦИИОво је стандардни тип кодирања и ограничен је кодирањем знакова истог имена.
утф8 - УТФ -8Ово је променљива са кодирањем које може представљати сваки постојећи Уницоде знак, а ово је подразумевано кодирање нашег бафера у случају да ниједан није наведен.
басе64 - Басе64Ово је врста кодирања која се користи за представљање бинарних података у врсти стринг формата. АСЦИИ и углавном се користи за уградњу бинарних података у текстуалне документе како би се осигурало да подаци остану нетакнути у транспорту.
Осим тога, ако немамо почетни садржај за наш бафер и морамо га креирати, то можемо учинити специфицирањем његовог капацитета, јер то радимо на следећи начин:
вар буф = нови бафер (1024);Овим, оно што ми радимо је да створимо 1024-бајтни бафер за наше будуће операције.
Руковање бајтовима у баферу
Након што смо креирали или примили бафер, можда ћемо желети да га прегледамо и променимо његов садржај. Прво, за приступ бајтовима унутар њега, можемо користити заграде на следећи начин:
вар буф = нови бафер ('ево садржаја мог бафера'); цонсоле.лог (буф [10]);Ако покренемо наш пример, добићемо десету позицију бафера, можемо чак и да пређемо на девету позицију бафера и да видимо резултат, да видимо како то изгледа:
Као што видимо, добијамо насумичне бајтове за положаје нашег бафера, чак и ако треба да манипулишемо садржајем било које позиције у њему, можемо учинити нешто попут следећег:
вар буф = нови бафер ('ево садржаја мог новог бафера'); буф [2] = 110; буф [6] = 180; буф [10] = 90; цонсоле.лог (буф [2]); цонсоле.лог (буф [6]); цонсоле.лог (буф [10]);Погледајмо одговор конзоле нашег примера:
Као што смо видели, могли смо без већих проблема изменити садржај одређених позиција унутар нашег бафера, поред тога можемо добити величину нашег бафера са својством дужине као што следи:
вар буф = нови бафер (100); цонсоле.лог (буф.ленгтх);Ако смо посматрачи, можемо видјети да ће одговор наше конзоле бити 100, гдје након добијања ове вриједности можемо је користити за понављање нашег бафера и на тај начин манипулирати сваком позицијом како бисмо добили њену вриједност или поставили одређену вриједност. једноставан пример овога:
вар буф = нови бафер (100); фор (вар и = 0; и <буф.ленгтх; и ++) {буф [и] = и; } цонсоле.лог (буф);Оно што смо урадили у овом примеру је креирање новог тампон са капацитетом од 100 бајтова, а затим смо поставили сваки бајт са вредношћу која почиње од 0 до 99, коначно да видимо одговор конзоле када извршимо наш пример:
Извлачење бафер података
Још једна занимљива карактеристика бафера, након што смо га креирали или примили, је могућност издвајања његовог дела. Можемо га „исецкати“ да то каже на неки начин и створити још један мањи бафер са оним делом који смо исецкали, не заборављајући да наведемо одакле ћемо га исецкати, да видимо пример који илуструје оно што смо објаснили:
вар буффер_цомплете = нев Буффер ("ово је садржај мог бафера који ћемо исецкати"); вар буффер_смалл = фулл_буффер.слице (26, 55); цонсоле.лог (буффер_смалл.тоСтринг ());Као што видимо, прво креирамо инстанцу нашег бафера са почетним садржајем, затим са функцијом кришка () Одређујемо од и доакле ћемо набавити садржај, додељујемо оно што добијемо новој променљивој и на крају декодирамо садржај како бисмо могли да визуализујемо садржај нашег другог бафера, да видимо одговор помоћу конзоле приликом извршавања пример:
Важно је напоменути да када исечемо нови бафер не користимо нову системску меморију, овај нови бафер користи меморију оца будући да се односи само на њега, али са другачијим почетком и завршетком. Ово може изазвати проблеме ако не будемо пажљиви јер радимо на истом баферу, зато препоручујемо рад са методом копија како бисмо избегли проблеме, које ћемо видети у наставку.
Копирање бафера
Као што смо споменули, приликом резања бафера можемо доћи до неких проблема ако нисмо опрезни, али за то имамо методу копија, који нам омогућава да копирамо садржај бафера у нови бафер, користећи нову инстанцу и нови меморијски простор, да видимо:
вар буффер1 = нови бафер ("Међуспремник садржаја 1, садржај за копирање"); вар буффер2 = нови бафер (20); вар стартобј = 0; вар стартСоурце = 26; вар соурцеЕнд = 50; буффер1.цопи (буффер2, стартобј, стартСоурце, ендСоурце); цонсоле.лог (буффер2.тоСтринг ());Као што видимо, стварамо два различита бафера, где ће први имати садржај, а други само величину, одређујемо почетак за наш други бафер, и на исти начин означавамо почетак и крај за нови бафер који ћемо копирати, да видимо одговор конзоле при извођењу примера:
Декодирање бафера
Као што смо видели у претходним примерима, успели смо да одштампамо оригинални садржај нашег бафера користећи методу тоСтринг (), ово што се зове је декодирање бафера, где је попут инстанце класе Бафер () ако ништа не наведемо, подразумевано га декодирамо у УТФ-8.
Можемо чак и да транскодирамо низ УТФ-8 до басе64 да поменем један случај, да видимо:
вар стрингутф8 = 'мој нови низ'; вар буф = нови бафер (стрингутф8); вар басе64стринг = буф.тоСтринг ('басе64') цонсоле.лог (басе64стринг);Коначно да видимо како смо транскодирали наш оригинални низ:
Овим смо завршили овај водич у којем смо научили начине рада са бинарним подацима у Ноде.јс захваљујући класи Буффер, који нам омогућава да манипулишемо њиме од његовог читања, писања, добијања малих делова, копирања у нове инстанце и чак претварања тог бафера у нове врсте кодирања за његову манипулацију у нашим програмима.