Бафер је одређена локација у сировој меморији. Служи као привремени простор за складиштење вишка бинарних података које процесорска јединица не може прихватити у том тренутку.
Ноде.јс укључује класу Буффер. Може да се бави бинарним подацима када управља ТЦП (Трансфер Цонтрол Протоцол) токовима и операцијама читања и писања на систему датотека.
Научите како да креирате, читате и мењате садржај бафера.
Креирање бафера
Да бисте креирали бафер у Ноде.јс, користићете аллоц() или од() методе. Тхе аллоц() метод креира нови бафер, наводећи његову величину током креирања као први и једини потребни параметар. Корисно је када немате никакве податке за чување у тренутку креирања бафера.
Наведите параметар величине бафера у бајтовима када креирате бафер са аллоц() методом. На пример:
конст буф = Буффер.аллоц(8);
конзола.лог (буф);
// излаз:
Класа Буффер аутоматски додаје нуле као вредности чувара места за нове податке када их креирате са аллоц() методом.
Класа Буффер изражава сваку вредност 0 као 00, користећи хексадецимални формат. У овом примеру, садржи укупно осам вредности.
Да бисте иницијализовали бафер са различитим вредностима чувара места, прођите секунду испунити параметар:
конст буф_филлед = Буффер.аллоц(8, 5);
конзола.лог (буф_филлед);
// излаз:
Овај објекат цитира део у меморији који чува 8 бајтова вредности 05. Имајте на уму да иако сте проследили број као испунити параметар, бафери чувају само податке у бинарном облику.
Након доделе меморије у бафер, упишите податке позивањем напиши() метод:
конст буф = Буффер.аллоц(8);
буф.врите("в", "утф-8");
конзола.лог (буф)
// излаз:
буф.врите("ва","утф-8");
конзола.лог (буф)
// излаз:
Тхе напиши() метода користи кодирање знакова за конверзију првог параметра, користећи утф-8 а затим уписује стринг у бафер. Додавање другог знака у низ ће попунити други бајт.
Да бисте издвојили податке из постојећих типова података као што су стрингови или низови, користите од() методом. Овај метод креира бафере од стрингова и низова.
На пример:
// Низ
конст стрингБуф = Буффер.фром('низ')
конзола.лог (стрингБуф)
// излаз:
// Арраи
конст арраиБуф = Буффер.фром([97, 114, 114, 97, 121], 'хек')
конзола.лог (арраиБуф);
// излаз:
Тхе од() метода узима улаз као свој први параметар, израчунава број бајтова који му је потребан за кодирање података, а затим шаље резултат у бафер. Достављањем другог формата кодирања као другог параметра, можете заменити подразумевано кодирање (УТФ-8).
Преношење бројева на од() метод ће довести до грешке.
Читање бафера
Иако су бафери слични низовима, њима се не може променити величина и могу се носити са њима бинарни рачунарски подаци захваљујући уграђеним методама.
Класа Буффер нам омогућава да читамо појединачне бајтове њених података користећи ЈаваСцрипт синтаксу угластих заграда.
На пример:
конст миБуф = Буффер.фром('моје');
конзола.Пријава(МиБуф[1]);
// излаз: 105конзола.Пријава(МиБуф[3]);
// излаз: 101
конзола.Пријава(МиБуф[5]);
// излаз: недефинисано
Блок кода изнад користи синтаксу угластих заграда за добијање вредности првог и трећег бајта у њиховом децималном приказу. Покушај да се добије неважећи бајт ће резултирати недефинисан грешка.
За приступ свим својим подацима, класа Буффер долази са методама тоЈСОН() и тоСтринг(), који добијају садржај у два различита формата.
Тхе тоСтринг() метод даје стринг као садржај бафера:
конст миБуф = Буффер.фром('моје');
конзола.Пријава(миБуф.тоСтринг());
// излаз: 'Моје'конст нумберБуф = Буффер.фром([123]);
конзола.Пријава(нумберБуф.тоСтринг())
// излаз: '{'
конст емптиБуф = Буффер.аллоц(5);
конзола.Пријава(емптиБуф.тоСтринг());
// излаз: '\\к00\\к00\\к00\\к00\\к00'
Први позив иницијализује бафер са вредношћу „Моје”, који реплицира позив на тоСтринг. Други пример користи једнократни низ за иницијализацију, који има стринг репрезентацију као „{” карактер. У крајњем случају, бафер са пет нулте вредности враћа стринг “\к00\к00\к00\к00\к00”. Стринг \к00 је хексадецимални приказ нуле.
Тхе тоСтринг() метода увек даје резултат у формату стринга, без обзира на то којим типом података иницијализујете бафер.
Тхе .тоЈСОН() метода враћа децимални приказ података бафера, без обзира на податке које сте користили за иницијализацију бафера.
На пример:
конст миБуф = Буффер.фром('моје');
конзола.Пријава(миБуф.тоЈСОН());
// излаз: { тип: 'бафер', подаци: [ 77, 105, 110, 101 ] }
ЈСОН излаз има а тип имовине у вредности од Буффер да укаже на његово порекло. Његово својство података чува низ децимала које представљају оригинални низ бајтова.
Измена бафера
Слично приступу појединачним бајтовима бафера, такође можете да измените појединачне бајтове садржаја бафера користећи синтаксу угластих заграда.
Када користите синтаксу угластих заграда за промену појединачног садржаја, можете доделити само децимални приказ вредности.
На пример:
миБуф[0] = 70
конзола.Пријава(миБуф.тоСтринг())
// излаз: 'Добро'
Пошто су бафери бинарни подаци, не можете одређеном делу бафера дати стринг. Ако покушате да поставите појединачни бајт у стринг, Буффер ће га превести у нулти карактер.
На пример:
миБуф[0] = 'Ф';
конзола.Пријава(миБуф.тоСтринг());
// излаз: '\\к00ине'
Алтернативно, можете променити цео садржај бафера користећи напиши() методом.
Размислите о уметању индекса изван дужине бафера. Уместо да враћа грешку, Буффер игнорише неважећи индекс и задржава оригинални садржај бафера нетакнутим.
На пример, покушајте да поставите пети елемент од миБуф до р преко своје децималне репрезентације 114:
миБуф[4] = 114;
конзола.Пријава(миБуф.тоСтринг());
// излаз: 'Моје'
Приметите да је тоСтринг() метода враћа исту вредност 'моје'.
Пошто не можете да промените величину бафера, покушај да упишете више података него што један може да задржи резултираће одбацивањем додатних података. На пример:
конст буф1 = Буффер.аллоц(5)
буф1.врите('број');
конзола.Пријава(буф1.тоСтринг())
// излаз: 'нумбе'
Помоћу тоСтринг() метода за потврду података бафера, враћа се 'број' радије него 'број'. Који је уметнути аргумент унутар напиши() методом.
Бафери пишу на серијски начин почевши од индекса нула. Тхе напиши() метод серијски додаје бајтове у бафер, замењујући све претходне податке.
На пример:
конст буф2 = Буффер.аллоц(6);
буф2.врите('члан');
конзола.Пријава(буф2.тоСтринг())
// излаз: 'члан'
буф2.врите('Здраво');
конзола.Пријава(буф2.тоСтринг());
// излаз: 'химбер'
Горњи код креира бафер од шест бајтова и додаје стринг „члан” на то користећи напиши() методом.
Затим ажурира бафер новим садржајем који заузима мање меморијског простора од ранијег садржаја.
Ово резултира стварањем новог стринга са прва два бајта преписаним, а преосталим бајтовима остављеним непромењеним.
Многи АПИ-ји и структуре података користе бафере
Сада знате како да направите бафер, пишете у њега, прочитате његов садржај и измените га одговарајућим методама.
Постоји неколико других доступних метода за рад са класом Ноде.јс Буффер.
Требало би да познајете ове методе и разумете бафере да бисте разумели како функционишу различити концепти попут токова и система датотека.