المخزن المؤقت هو موقع محدد في الذاكرة الأولية. إنه بمثابة مساحة تخزين مؤقتة للبيانات الثنائية الزائدة التي لا يمكن لوحدة المعالجة قبولها في تلك اللحظة بالذات.
يتضمن Node.js فئة المخزن المؤقت. يمكنه التعامل مع البيانات الثنائية عند إدارة تدفقات TCP (بروتوكول التحكم في النقل) وعمليات القراءة والكتابة على نظام الملفات.
تعرف على كيفية إنشاء محتويات المخزن المؤقت وقراءتها وتغييرها.
إنشاء عازلة
لإنشاء مخزن مؤقت في Node.js ، ستستخدم ملف تخصيص () أو من() طُرق. ال تخصيص () الطريقة تنشئ مخزنًا مؤقتًا جديدًا ، وتحدد حجمه أثناء الإنشاء باعتباره المعلمة الأولى والوحيدة المطلوبة. يكون مفيدًا عندما لا يكون لديك أي بيانات لتخزينها في وقت إنشاء المخزن المؤقت.
حدد معلمة حجم المخزن المؤقت بالبايت عند إنشاء مخزن مؤقت بامتداد تخصيص () طريقة. على سبيل المثال:
مقدار ثابت buf = Buffer.alloc (8);
وحدة التحكم.log (buf) ؛
// انتاج:
تضيف فئة Buffer الأصفار تلقائيًا كقيم مواضع للبيانات الجديدة عند إنشائها بامتداد تخصيص () طريقة.
تعبر فئة المخزن المؤقت عن كل قيمة 0 كـ 00، باستخدام تنسيق سداسي عشري. في هذا المثال ، يحتوي على إجمالي ثماني قيم.
لتهيئة المخزن المؤقت بقيم مختلفة للعناصر النائبة ، قم بتمرير ثانية يملأ معامل:
مقدار ثابت buf_filled = Buffer.alloc (8, 5);
وحدة التحكم.log (buf_filled) ؛
// انتاج:
يستشهد هذا الكائن بجزء في الذاكرة يخزن 8 بايت من القيمة 05. لاحظ أنه على الرغم من أنك مررت رقمًا باسم يملأ المعلمة ، المخازن المؤقتة تخزن البيانات فقط في ثنائي.
بعد تخصيص الذاكرة إلى المخزن المؤقت ، اكتب البيانات عن طريق استدعاء يكتب() طريقة:
مقدار ثابت buf = Buffer.alloc (8);
buf.write ("الخامس", "utf-8");
وحدة التحكم.log (buf)
// انتاج:
buf.write ("va","utf-8");
وحدة التحكم.log (buf)
// انتاج:
ال يكتب() يستخدم الأسلوب ترميز الأحرف لتحويل المعلمة الأولى ، باستخدام UTF-8 ثم يكتب السلسلة إلى المخزن المؤقت. ستؤدي إضافة حرف ثانٍ إلى السلسلة إلى ملء البايت الثاني.
لاستخراج البيانات من أنواع البيانات الموجودة مثل السلاسل أو المصفوفات ، استخدم ملحق من() طريقة. تقوم هذه الطريقة بإنشاء مخازن مؤقتة من السلاسل والمصفوفات.
على سبيل المثال:
// خيط
مقدار ثابت stringBuf = Buffer.from ('خيط')
وحدة التحكم.log (stringBuf)
// انتاج:
// مجموعة مصفوفة
مقدار ثابت arrayBuf = Buffer.from ([97, 114, 114, 97, 121], 'عرافة')
وحدة التحكم.log (arrayBuf) ؛
// انتاج:
ال من() يأخذ الأسلوب الإدخال كمعامله الأول ، ويحسب عدد البايتات التي يحتاجها لتشفير البيانات ، ثم يرسل النتيجة إلى المخزن المؤقت. من خلال توفير تنسيق ترميز آخر كمعامل ثاني ، يمكنك تجاوز الترميز الافتراضي (UTF-8).
تمرير الأرقام إلى من() ستؤدي الطريقة إلى حدوث خطأ.
قراءة عازلة
على الرغم من أن المخازن المؤقتة تشبه المصفوفات ، إلا أنها لا يمكن تغيير حجمها ويمكن التعامل معها بيانات الكمبيوتر الثنائية بفضل الأساليب المدمجة.
تسمح لنا فئة Buffer بقراءة البايتات الفردية لبياناتها باستخدام صيغة القوس المربع في JavaScript.
على سبيل المثال:
مقدار ثابت myBuf = Buffer.from ('مِلكِي');
وحدة التحكم.سجل(MyBuf[1]);
// الإخراج: 105وحدة التحكم.سجل(MyBuf[3]);
// الإخراج: 101
وحدة التحكم.سجل(MyBuf[5]);
// الإخراج: غير محدد
تستخدم كتلة الشفرة أعلاه بنية الأقواس المربعة للحصول على قيم البايتين الأول والثالث في تمثيلهما العشري. ستؤدي محاولة الحصول على بايت غير صالح إلى ملف غير معرف خطأ.
للوصول إلى جميع بياناتها ، تأتي فئة Buffer مع طرق توجسون () و إلى سلسلة()، والتي تحصل على المحتويات بتنسيقين مختلفين.
ال إلى سلسلة() يقوم الأسلوب بإخراج سلسلة كمحتويات المخزن المؤقت:
مقدار ثابت myBuf = Buffer.from ('مِلكِي');
وحدة التحكم.سجل(myBuf.إلى سلسلة());
// الإخراج: "Mine"مقدار ثابت numberBuf = Buffer.from ([123]);
وحدة التحكم.سجل(رقم.إلى سلسلة())
// انتاج: '{'
مقدار ثابت فارغ Buf = Buffer.alloc (5);
وحدة التحكم.سجل(فارغ.إلى سلسلة());
// الإخراج: '\\ x00 \\ x00 \\ x00 \\ x00 \\ x00'
الاستدعاء الأول يهيئ المخزن المؤقت بالقيمة "مِلكِي"، والذي يكرره استدعاء toString. يستخدم المثال الثاني مصفوفة أحادية int للتهيئة ، والتي لها تمثيل سلسلة كـ “{" شخصية. في الحالة الأخيرة ، عازلة مع خمسة قيم فارغة ترجع السلسلة "\ x00 \ x00 \ x00 \ x00 \ x00”. السلسلة \ x00 هو التمثيل السداسي العشري للقيمة null.
ال إلى سلسلة() تقوم الطريقة دائمًا بإخراج النتيجة بتنسيق سلسلة ، بغض النظر عن نوع البيانات التي تقوم بتهيئة المخزن المؤقت بها.
ال .toJSON () تقوم الطريقة بإرجاع التمثيل العشري لبيانات المخزن المؤقت ، بغض النظر عن البيانات التي استخدمتها لتهيئة المخزن المؤقت.
على سبيل المثال:
مقدار ثابت myBuf = Buffer.from ('مِلكِي');
وحدة التحكم.سجل(myBuf.toJSON());
// انتاج: { يكتب: 'متعادل'، البيانات: [77 ، 105 ، 110 ، 101]}
يحتوي إخراج JSON على ملف يكتب الممتلكات بقيمة متعادل للإشارة إلى أصله. تخزن خاصية البيانات الخاصة بها مصفوفة من الكسور العشرية التي تمثل مصفوفة البايت الأصلية.
تعديل المخزن المؤقت
على غرار الوصول إلى وحدات البايت الفردية للمخزن المؤقت ، يمكنك أيضًا تعديل وحدات البايت الفردية لمحتوى المخزن المؤقت باستخدام بنية الأقواس المربعة.
عند استخدام بنية الأقواس المربعة لتغيير محتوى فردي ، يمكنك فقط تعيين التمثيل العشري للقيمة.
على سبيل المثال:
myBuf [0] = 70
وحدة التحكم.سجل(myBuf.إلى سلسلة())
// الإخراج: "جيد"
لأن المخازن المؤقتة هي بيانات ثنائية ، لا يمكنك إعطاء جزء معين من المخزن المؤقت سلسلة. إذا حاولت تعيين بايت فردي إلى سلسلة ، فسيقوم Buffer بترجمته إلى حرف فارغ.
على سبيل المثال:
myBuf [0] = 'F';
وحدة التحكم.سجل(myBuf.إلى سلسلة());
// الإخراج: '\\ x00ine'
بدلاً من ذلك ، يمكنك تغيير محتويات المخزن المؤقت بالكامل باستخدام امتداد يكتب() طريقة.
ضع في اعتبارك إدراج فهرس خارج طول المخزن المؤقت. بدلاً من إرجاع الخطأ ، يتجاهل Buffer الفهرس غير الصحيح ويحافظ على محتوى Buffer الأصلي سليمًا.
على سبيل المثال ، حاول تعيين العنصر الخامس من myBuf ل ص من خلال التمثيل العشري لـ 114:
myBuf [4] = 114 ؛
وحدة التحكم.سجل(myBuf.إلى سلسلة());
// الإخراج: "Mine"
لاحظ أن ملف إلى سلسلة() طريقة إرجاع نفس القيمة 'مِلكِي'.
نظرًا لأنه لا يمكنك تغيير حجم المخزن المؤقت ، فإن محاولة كتابة بيانات أكثر مما يمكن للمرء الاحتفاظ به ستؤدي إلى تجاهل البيانات الإضافية. على سبيل المثال:
مقدار ثابت buf1 = Buffer.alloc (5)
buf1.write ('رقم');
وحدة التحكم.سجل(buf1.إلى سلسلة())
// الإخراج: "numbe"
باستخدام إلى سلسلة() طريقة لتأكيد البيانات العازلة ، فإنه يعود "خدر" بدلا من 'رقم'. وهي الحجة المدرجة داخل يكتب() طريقة.
تكتب المخازن المؤقتة بأسلوب تسلسلي يبدأ من صفر فهرس. ال يكتب() يضيف الأسلوب بشكل تسلسلي بايت إلى المخزن المؤقت ، والكتابة فوق أي بيانات سابقة.
على سبيل المثال:
مقدار ثابت buf2 = Buffer.alloc (6);
buf2.write ('عضو');
وحدة التحكم.سجل(buf2.إلى سلسلة())
// الإخراج: "عضو"
buf2.write ('أهلاً');
وحدة التحكم.سجل(buf2.إلى سلسلة());
// الإخراج: "heber"
ينشئ الكود أعلاه مخزنًا مؤقتًا من ستة بايت ويضيف السلسلة "عضو" إليها باستخدام يكتب() طريقة.
ثم يقوم بتحديث المخزن المؤقت بمحتوى جديد يشغل مساحة ذاكرة أقل من المحتوى السابق.
ينتج عن هذا إنشاء سلسلة جديدة مع الكتابة فوق أول وحدتي بايت وترك البايت المتبقي دون تغيير.
تستخدم العديد من واجهات برمجة التطبيقات وهياكل البيانات المخازن المؤقتة
أنت الآن تعرف كيفية إنشاء مخزن مؤقت ، والكتابة إليه ، وقراءة محتوياته ، وتعديله بالطرق المناسبة.
هناك العديد من الطرق الأخرى المتاحة للعمل مع فئة Node.js Buffer.
يجب أن تعرف هذه الأساليب وتفهم المخازن المؤقتة لفهم كيفية عمل المفاهيم المختلفة مثل التدفقات وأنظمة الملفات.