مقدمهای بر ArrayBuffer در جاوااسکریپت
یکی از ویژگیهای جالب و جدید جاوااسکریپت، قابلیت استفاده از ArrayBuffer است. این ویژگی برای کار با دادههای باینری مفید است که در کنار DataView و TypedArray، امکان دستکاری دقیقتری از دادهها را به ما میدهد. اگر از شیوه کدگون و ساختار صوتی یا تصویری استفاده میکنید، ArrayBuffer یک ابزار بسیار مفید خواهد بود.
در تغییرات جدید، قابلیت resizable به ArrayBuffer اضافه شده است که به ما اجازه میدهد اندازه این بافر را تغییر دهیم. به این ترتیب، میتوانید دادهها را به صورت داینامیک به بافر اضافه کنید یا از آن حذف کنید.
این قابلیت در مواردی که نیاز به ذخیرهسازی حجم زیادی از دادهها به صورت پویا داریم، بسیار کاربردی است. تصور کنید در حال توسعه یک نرمافزار ضبط صدا هستید و میخواهید ذخیرهسازی دادهها به صورت مستقیم در حافظه انجام گیرد.
در ادامه، با مثالهایی نقش این قابلیت را بهتر درک خواهیم کرد و نگاهی به چند روش استفاده از resizable در ArrayBuffer خواهیم داشت.
نمونه کد با استفاده از ArrayBuffer رزیزبل
// ایجاد یک ArrayBuffer با قابلیت تغییر اندازه
let buffer = new ArrayBuffer(10, { resizable: true, maxByteLength: 100 });
// نمایش طول اولیه
console.log(buffer.byteLength); // 10
// تغییر اندازه بافر
buffer.resize(20);
// نمایش طول جدید
console.log(buffer.byteLength); // 20
// تلاش برای بیش از اندازه شدن حداکثری
try {
buffer.resize(120);
} catch (e) {
console.error(e); // Error: Requested size exceeds the maximum size of 100
}
توضیح خط به خط کد
// ایجاد یک ArrayBuffer با قابلیت تغییر اندازه
در این خط، یک ArrayBuffer با طول اولیه ۱۰ و قابلیت resizable ایجاد کردهایم که حداکثر طول آن ۱۰۰ است.
let buffer = new ArrayBuffer(10, { resizable: true, maxByteLength: 100 });
ایجاد buffer با امکان تغییر سایز و تعریف حداکثر طول به کمک ویژگیهای resizable و maxByteLength.
// نمایش طول اولیه
این خط طول اولیه بافر را که ۱۰ است، در کنسول نمایش میدهد.
console.log(buffer.byteLength); // 10
استفاده از console.log
برای نمایش طول فعلی buffer در کنسول.
// تغییر اندازه بافر
در این خط، با استفاده از متد resize طول بافر را به ۲۰ تغییر میدهیم.
buffer.resize(20);
تغییر سایز buffer به ۲۰ به کمک متد resize.
// نمایش طول جدید
این خط طول جدید بافر را در کنسول نمایش میدهد.
console.log(buffer.byteLength); // 20
انتظار میرود طول جدید buffer به ۲۰ تغییر داده شده باشد و به این ترتیب در کنسول نمایش داده شود.
// تلاش برای بیش از اندازه شدن حداکثری
در اینجا سعی داریم طول بافر را به بیش از حداکثر مقدار تنظیم شده افزایش دهیم، که منجر به بروز خطا میشود.
try { buffer.resize(120); } catch (e) { console.error(e); }
با توجه به حداکثر محدودیت تنظیم شده، تلاش برای تعیین طول بیش از آن عددی منجر به خطا خواهد شد. این خطا را در کنسول چاپ میکنیم.