بافر به فضایی از حافظه اشاره دارد که از آن برای ذخیرهسازی موقت دادهها استفاده میشود. یک بافر به طور معمول، بین دستگاههایی که از لحاظ سرعت با یکدیگر هماهنگ نیستند، مورد استفاده قرار میگیرد، به طوری که این بافرها بدون اینکه به دادهها آسیب برسانند، میتوانند عملیات در حال اجرا را در یک سرعت به خصوص نگهدارند. از بافرها در node.js، زمانی استفاده میشود که با یک جریان فایل (دقت کنید منظور از جریان یا stream، دنباله ایی متوالی از دادهها است) یا جریان tcp که عمدتاً دارای دادههای باینری (binary) یا هشتتایی (octets) هستند، روبرو میشویم.
این متد برای ایجاد یک شی از نوع بافرها استفاده میشود و یک طول ابتدایی را برای بافر مشخص میکند که میتواند تماماً پر یا تماماً صفر باشد.
1- نحوی نوشتن این متد:
نحوی نوشتن متد Buffer.alloc() به صورت زیر است.
Buffer.alloc(size[, fill[, encoding]])
در این متد:
Size: طول مورد نیاز برای بافر جدید را مشخص میکند و باید از نوع دادههای صحیح باشد.
Fill: مقداری که باید در بافر قرار بگیرند را مشخص میکند. دقت کنید که مقدار پیشفرض 0 است. ما میتوانیم مقادیری از نوع داده ایی integer، string و buffer را در آن قرار دهیم.
encoding: نوع encoding را مشخص می کند.
2- کد مثال ساده در اینجا آورده شده است، من در مثال زیر نحوی استفاده از Buffer.alloc() را آوردهام.
//Name of the file : buffer.alloc.js var buff = Buffer.alloc(20); console.log(buff);
3- نتیجه اجرای دستور بالا به صورت زیر نمایش داده میشود.
این متد برای ایجاد یک شی از نوع بافرها استفاده میشود ولی یک طول ابتدایی را برای بافر مشخص نمیکند. با توجه به اینکه محتویات بافر جدید ایجاد شده، شناخته شده نیست ممکن است موجب تهدید امنیتی شود، زیرا ممکن است حاوی اطلاعات حساس یا محرمانه باشد.
1- نحوی نوشتن این متد:
نحوی نوشتن متد Buffer.allocUnsafe() به صورت زیر است.
Buffer.allocUnsafe(size)
2- مثالی از کد نویسی متد Buffer.allocUnsafe() در قسمت زیر برای شما آورده شده است.
//Name of the file : buffer.allocUnsafe.js var buff = Buffer.allocUnsafe(10); console.log(buff);
3- نتیجه اجرای دستور بالا به صورت زیر نمایش داده میشود.
این متد برای ایجاد یک بافر از نوع string، object، array یا buffer استفاده میشود.
1 - نحوی نوشتن متد Buffer.from() به صورت زیر است.
Buffer.from(string[, encoding])
در این متد:
String: داده ایی که در اینجا پاس داده میشود.
Encoding: نوع Encoding داده ایی که در اینجا پاس داده شدهاند را مشخص میکند و به صورت پیشفرض utf8 است. دقت کنید که این پارامتر اختیاری است.
2- مثالی از کد نویسی متد Buffer.from() در قسمت زیر برای شما آورده شده است.
//Name of the file : buffer.from.js var buff1 = Buffer.from('Nodejsera'); console.log("buff1 : " + buff1);
3- نتیجه اجرای مثال بالا به صورت زیر نمایش داده میشود.
این متد برای مقایسه بافرها استفاده میشود. مقدار بازگشتی این متد نیز یکی از 3 مقدار زیر میتواند باشد
0: اگر هر دو بافر مبدأ و مقصد یکسان باشند
1: اگر بافر مقصد قبل از بافر مبدأ قرار بگیرد.
-1: اگر بافر مبدأ قبل از بافر مقصد قرار بگیرد.
1- نحوی نوشتن متد buf.compare () به صورت زیر است.
buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])
در این متد:
target : بافر مقصد
targetStart : نقطه شروع مقایسه در بافر مقصد
targetEnd : نقطه پایان مقایسه در بافر مقصد
sourceStart : نقطه شروع مقایسه در بافر مبدأ
sourceEnd : نقطه پایان مقایسه در بافر مبدأ
2- مثالی از کد نویسی متد buf.compare () در قسمت زیر برای شما آورده شده است.
//Name of the file : buffer.compare.js var buffer1 = Buffer.from('Nodejsera'); var buffer2 = Buffer.from('Nodejsera'); var output = buffer1.compare(buffer2); console.log(output) if(output < 0) { console.log(buffer1 +" comes before " + buffer2); }else if(output == 0){ console.log(buffer1 +" is same as " + buffer2); }else { console.log(output +" comes after " + buffer2); }
3- نتیجه اجرای مثال بالا به صورت زیر نمایش داده میشود.
از این متد برای ترکیب دو یا چند بافر استفاده میشود.
1 - نحوی نوشتن متد Buffer.concat () به صورت زیر است.
Buffer.concat(list)
در این متد:
List: لیستی از بافرهایی که باید به یکدیگر متصل شوند.
2- مثالی از کد نویسی متد Buffer.concat () در قسمت زیر برای شما آورده شده است.
//Name of the file : buffer.concat.js var buff1 = Buffer.from('Nodejsera for nodejs'); var buff2 = Buffer.from('- 30 days of node'); var buff3 = Buffer.concat([buff1,buff2]); console.log("buff3 content: " + buff3.toString());
3- نتیجه اجرای مثال بالا به صورت زیر نمایش داده میشود.
از این متد برای کپی کردن مقدار مشخصی از بایت از بافر مبدأ در بافر مقصد استفاده میشود.
1- نحوی نوشتن متد buf.copy() به صورت زیر است.
buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
در این متد:
target : بافری که قرار است در آن کپی کنیم.
targetStart : مکانی در بافر مقصد که باید کپی شدن از آنجا شروع شود.
sourceStart : مکانی در بافر مبدأ که باید کپی کردن از آنجا شروع شود.
sourceEnd : مکانی در بافر مبدأ که باید کپی کردن در آنجا پایان یابد.
2- مثالی از کد نویسی متد buf.copy() در قسمت زیر برای شما آورده شده است.
//Name of the file : buffer.copy.js var buff = Buffer.from('Nodejsera'); var newbuff = Buffer.alloc(20); buff.copy(newbuff); console.log("Content of newbuff : " + newbuff.toString());
3- نتیجه اجرای مثال بالا به صورت زیر نمایش داده میشود.
از این متد برای مقایسه 2 بافر استفاده میشود. اگر بافرها با هم مطابقت داشته باشند، true برگشت داده میشود، در غیر این صورت، false برگشت داده میشود.
1- نحوی نوشتن متد buf.equals() به صورت زیر است.
buf.equals(otherBuffer)
در این متد:
otherBuffer : رشته ایی است که مقدار بافرها باید با آن مقایسه شوند.
2- مثالی از کد نویسی متد buf.equals() در قسمت زیر برای شما آورده شده است.
//Name of the file : buffer.equals.js var buff1 = Buffer.from('nodejsera'); var buff2 = Buffer.from('nodejsera'); console.log(buff1.equals(buff2));
3- نتیجه اجرای مثال بالا به صورت زیر نمایش داده میشود.
از این متد برای پر کردن بافر با یک مقدار مشخص شده استفاده میشود.
1- نحوی نوشتن متد buf.fill() به صورت زیر است.
buf.fill(value)
در این متد:
Value: همان مقداری است که با آن، بافر را پر میکنیم.
2- مثالی از کد نویسی متد () buf.fill در قسمت زیر برای شما آورده شده است.
//Name of the file : buffer.fill.js var buff = Buffer.allocUnsafe(10).fill('nj'); console.log(buff.toString());
3- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می شود.
این روش برای بررسی اینکه آیا بافر حاوی یک مقدار مشخص شده است یا خیر، استفاده میشود. اگر در بافر مذکور، آن مقدار مشخص شده وجود داشت، اندیس اولین خانه ایی را که مقدار مشخص شده بافر، اتفاق افتاده را بازگشت میدهد، در غیر این صورت یعنی اگر بافر فاقد مقدار مشخص شده بود، مقدار -1 را بازگشت میدهد.
1- نحوی نوشتن متد buf.indexOf() به صورت زیر است.
buf.indexOf(value)
در این متد:
Value: همان مقداری است که ما در بافر به دنبال آن میگردیم.
2- مثالی از کد نویسی متد buf.indexOf() در قسمت زیر برای شما آورده شده است.
//Name of the file : buffer.indexOf.js var buff1 = Buffer.from('Nodejsera'); console.log(buff1.indexOf('j'));
3- نتیجه اجرای مثال بالا به صورت زیر نمایش داده میشود.
از این متد برای به دست آوردن طول شی بافر استفاده میشود.
1- نحوی نوشتن متد buf.length به صورت زیر است.
buf.length
2- مثالی از کد نویسی متد buf.length در قسمت زیر برای شما آورده شده است.
//Name of the file : buffer.length.js var buf = Buffer.from('Nodejsera for nodejs'); console.log( buf.length);
3- نتیجه اجرای مثال بالا به صورت زیر نمایش داده میشود.
با استفاده از این متد میتوان بخشی از بافر را در یک بافر جدید قرار داد، البته باید نقطه شروع و پایان را در فایل مبدأ مشخص کنیم.
1- نحوی نوشتن متد ()buf.slice به صورت زیر است.
buf.slice([start[, end]])
در این متد:
Start: اندیس شروع
end : اندیس پایان
2- مثالی از کد نویسی متد ()buf.slice در قسمت زیر برای شما آورده شده است.
//Name of the file: buffer.slice.js var buff1 = Buffer.from('Nodejsera'); var buff2 = buff1.slice(0,5); console.log("content of buff2: " + buff2.toString());
3- نتیجه اجرای مثال بالا به صورت زیر نمایش داده میشود.
با استفاده از این متد می توان بافر را به JSON تبدیل کرد.
1- نحوی نوشتن متد buf.toJSON() به صورت زیر است.
()buf.toJSON
2- مثالی از کد نویسی متد ()buf.toJSON در قسمت زیر برای شما آورده شده است.
//Name of the file : bufferToJSON.js var buf = Buffer.from('Nodejsera'); var json = buf.toJSON(buf); console.log(json);
3- نتیجه اجرای مثال بالا به صورت زیر نمایش داده میشود.
از این متد برای تبدیل بافر به رشته استفاده میشود.
1- نحوی نوشتن متد buf.toString() به صورت زیر است.
buf.toString([encoding[, start[, end]]])
encoding : کاراکترهای encode شده را decode می کند.
start : اندیس شروع
End: اندیس پایان
2- مثالی از کد نویسی متد buf.toString() در قسمت زیر برای شما آورده شده است.
//Name of the file : bufferToString.js var buf = Buffer.from('Nodejsera for nodejs'); console.log( buf.toString('ascii'));
3- نتیجه اجرای مثال بالا به صورت زیر نمایش داده میشود.
در درس 21ام از سلسله دروس 30 روز با نود جی اس، ما با همدیگر یاد گرفتیم که بافرها چه هستند و برخی از اساسیترین متدهایی که در ماژول بافر از node.js وجود دارد را با همدیگر مرور کردیم.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.