۳۰ روز با Node – روز بیست و یکم: آشنایی با بافرها (Buffers) در نود جی اس

Nodejs-Wallpaper-buffers

معرفی بافرها

بافر به فضایی از حافظه اشاره دارد که از آن برای ذخیره‌سازی موقت داده‌ها استفاده می‌شود. یک بافر به طور معمول، بین دستگاه‌هایی که از لحاظ سرعت با یکدیگر هماهنگ نیستند، مورد استفاده قرار می‌گیرد، به طوری که این بافرها بدون اینکه به داده‌ها آسیب برسانند، می‌توانند عملیات در حال اجرا را در یک سرعت به خصوص نگهدارند. از بافرها در node.js، زمانی استفاده می‌شود که با یک جریان فایل (دقت کنید منظور از جریان یا stream، دنباله ایی متوالی از داده‌ها است) یا جریان tcp که عمدتاً دارای داده‌های باینری (binary) یا هشت‌تایی (octets) هستند، روبرو می‌شویم.

متدهای مورد نیاز برای کار با بافرها در node.js

  • ()alloc

این متد برای ایجاد یک شی از نوع بافرها استفاده می‌شود و یک طول ابتدایی را برای بافر مشخص می‌کند که می‌تواند تماماً پر یا تماماً صفر باشد.

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- نتیجه اجرای دستور بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای دستور Buffer alloc

  • ()Buffer.allocUnsafe

این متد برای ایجاد یک شی از نوع بافرها استفاده می‌شود ولی یک طول ابتدایی را برای بافر مشخص نمی‌کند. با توجه به اینکه محتویات بافر جدید ایجاد شده، شناخته شده نیست ممکن است موجب تهدید امنیتی شود، زیرا ممکن است حاوی اطلاعات حساس یا محرمانه باشد.

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- نتیجه اجرای دستور بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای متد Buffer allocUnsafe

  • Buffer.from() 

این متد برای ایجاد یک بافر از نوع 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- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای متد Buffer from

  • ()buf.compare

این متد برای مقایسه بافرها استفاده می‌شود. مقدار بازگشتی این متد نیز یکی از 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- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای متد buf compare

  • ()Buffer.concat 

از این متد برای ترکیب دو یا چند بافر استفاده می‌شود.

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- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای متد Buffer concat

  • ()buf.copy

از این متد برای کپی کردن مقدار مشخصی از بایت از بافر مبدأ در بافر مقصد استفاده می‌شود.

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- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای متد buff copy

  • () buf.equals

از این متد برای مقایسه 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- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای متد buf equals

  • ()buf.fill

از این متد برای پر کردن بافر با یک مقدار مشخص شده استفاده می‌شود.

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- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می شود.

نتیجه اجرای متد buf fill

  • buf.indexOf()

این روش برای بررسی اینکه آیا بافر حاوی یک مقدار مشخص شده است یا خیر، استفاده می‌شود. اگر در بافر مذکور، آن مقدار مشخص شده وجود داشت، اندیس اولین خانه ایی را که  مقدار مشخص شده بافر، اتفاق افتاده را بازگشت می‌دهد، در غیر این صورت یعنی اگر بافر فاقد مقدار مشخص شده بود، مقدار -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- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای متد buf indexOf

  • buf.length

از این متد برای به دست آوردن طول شی بافر استفاده می‌شود.

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- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای متد buf length

  • ()Buffer.slice

با استفاده از این متد می‌توان بخشی از بافر را در یک بافر جدید قرار داد، البته باید نقطه شروع و پایان را در فایل مبدأ مشخص کنیم.

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- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای متد buffer slice

  • ()buf.toJSON

با استفاده از این متد می توان بافر را به 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- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای متد bufferToJSON

  • ()buf.toString

از این متد برای تبدیل بافر به رشته استفاده می‌شود.

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- نتیجه اجرای مثال بالا به صورت زیر نمایش داده می‌شود.

نتیجه اجرای متد buf toString

خلاصه

در درس 21ام از سلسله دروس 30 روز با نود جی اس، ما با همدیگر یاد گرفتیم که بافرها چه هستند و برخی از اساسی‌ترین متدهایی که در ماژول بافر از node.js وجود دارد را با همدیگر مرور کردیم.

نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.