يعد JavaScript جيدًا في التعامل مع السلاسل ، ولكن نظرًا لأنه تم تصميمه في الأصل للتعامل مع مستندات HTML ، فهو ليس جيدًا في التعامل مع البيانات الثنائية. JavaScript ليس له نوع بايت ، ولا أنواع منظمة ، وحتى لا توجد صفائف بايت ، فقط الأرقام والسلاسل. (النص الأصلي: لا يحتوي JavaScript على نوع بايت - إنه يحتوي فقط على أرقام - أو أنواع منظمة ، أو http://skylitecellars.com/ حتى صفائف البايت: لها سلاسل فقط.)
نظرًا لأن العقدة تعتمد على javaScript ، فيمكنها التعامل بشكل طبيعي مع بروتوكولات النص مثل HTTP ، ولكن يمكنك أيضًا استخدامها للتفاعل مع قواعد البيانات أو صور المعالجة أو تحميل الملفات ، وما إلى ذلك. من الصعب على مدى صعوبة القيام بهذه الأشياء مع سلاسل فقط. في وقت سابق ، تعاملت العقدة مع البيانات الثنائية عن طريق ترميز البايت في أحرف نصية ، ولكن هذه الطريقة أثبتت فيما بعد غير ممكنة ، وهدر الموارد ، البطيئة ، غير المرنة ، ويصعب الحفاظ عليها.
العقدة لديها مخزن مؤقت للتنفيذ الثنائي. توفر هذه الفئة الزائفة سلسلة من واجهات برمجة التطبيقات لمعالجة البيانات الثنائية ، مما يؤدي إلى تبسيط المهام التي تتطلب معالجة البيانات الثنائية. يتم تحديد طول المخزن المؤقت بطول بيانات البايت ، ويمكنك ضبطها بشكل عشوائي والحصول على بيانات البايت في المخزن المؤقت.
ملاحظة: فئة المخزن المؤقت لها مكان خاص. لا يتم تخصيص الذاكرة التي تشغلها بيانات البايت في المخزن المؤقت في JavasCRP.
إنه كومة ذاكرة VM ، أي أن هذه الكائنات لن تتم معالجتها بواسطة خوارزمية جمع القمامة في JavaScript ، وسيتم استبدالها بعنوان ذاكرة دائم لن يتم تعديله ، والذي يتجنب أيضًا نفايات وحدة المعالجة المركزية الناتجة عن نسخ الذاكرة للمحتوى المخزن المؤقت.
إنشاء مخزن مؤقت
يمكنك إنشاء مخزن مؤقت مع سلسلة UTF-8 مثل هذا:
نسخة الكود كما يلي:
var buf = New Buffer ('Hello World!') ؛
يمكنك أيضًا إنشاء مخزن مؤقت مع تشفير محدد:
نسخة الكود كما يلي:
var buf = new Buffer ('8b76fde713ce' ، 'base64') ؛
تشفير الأحرف المقبول وتحديد الهوية على النحو التالي:
1.ascii-asci ، ينطبق فقط على مجموعات أحرف ASCII.
2.UTF8-UTF-8 ، هذا الترميز على مستوى المتغير مناسب لأي حرف في مجموعة أحرف Unicode. لقد أصبح الترميز المفضل في عالم الويب وهو أيضًا نوع الترميز الافتراضي للعقدة.
3.Base64 - BASE64 ، يعتمد هذا الترميز على 64 حرفًا قابلة للطباعة ASCII لتمثيل البيانات الثنائية. عادةً ما يتم استخدام BASE64 لتضمين البيانات الثنائية التي يمكن تحويلها إلى سلاسل في وثيقة الأحرف ، ويمكن تحويلها إلى التنسيق الثنائي الأصلي سليما وبدون فقدان عند الحاجة.
إذا لم يكن هناك بيانات لتهيئة المخزن المؤقت ، فيمكنك إنشاء مخزن مؤقت فارغ مع حجم السعة المحدد:
نسخة الكود كما يلي:
var buf = New Buffer (1024) ؛ // قم بإنشاء عازلة 1024 بايت
احصل على البيانات المخزنة وضبطها
بعد إنشاء كائن مخزّن أو استلامه ، قد ترغب في عرض محتوياته أو تعديله. يمكنك الوصول إلى بايت معين من المخزن المؤقت من خلال المشغل []:
نسخة الكود كما يلي:
var buf = عازلة جديدة ("محتوى العازلة الخاص بي") ؛
// الوصول إلى البايت العاشر في المخزن المؤقت
console.log (buf [10]) ؛ // -> 99
ملاحظة: عندما تقوم بإنشاء مخزن مؤقت تهيئة (باستخدام حجم سعة المخزن المؤقت) ، تأكد من ملاحظة أن البيانات المخزنة لا تتم تهيئتها إلى 0 ، ولكنها بيانات عشوائية.
نسخة الكود كما يلي:
var buf = New Buffer (1024) ؛
console.log (buf [100]) ؛ // -> 5 (بعض القيمة العشوائية)
يمكنك تعديل البيانات في أي مكان في المخزن المؤقت مثل هذا:
نسخة الكود كما يلي:
BUF [99] = 125 ؛ // اضبط قيمة البايت 100 إلى 125
ملاحظة: في بعض الحالات ، لا تنتج بعض عمليات التخزين المؤقت أخطاء ، مثل:
1. الحد الأقصى لقيمة البايتات في المخزن المؤقت هو 255. إذا تم تعيين بايت رقم أكبر من 256 ، فسيتم تعديله مع 256 ثم تعيين النتيجة لهذا البايت.
2. إذا تم تعيين بايت مخزنة إلى 256 ، فستكون قيمتها الفعلية 0 (ملاحظة المترجم: يتم تكرارها فعليًا مع أول واحد ، 256 ٪ 256 = 0)
3. إذا كنت تستخدم رقم نقطة عائمة لتعيين قيمة إلى بايت في المخزن المؤقت ، مثل 100.7 ، ستكون القيمة الفعلية هي الجزء الصحيح من رقم الفاصلة العائمة - 100
4. إذا حاولت تعيين قيمة لموضع يتجاوز سعة المخزن المؤقت ، فسوف تفشل عملية المهمة ولن يتم تعديل المخزن المؤقت.
يمكنك استخدام سمة الطول للحصول على طول المخزن المؤقت:
نسخة الكود كما يلي:
var buf = New Buffer (100) ؛
console.log (buf.length) ؛ // -> 100
يمكنك أيضًا التكرار عبر المحتويات المخزنة باستخدام طول المخزن المؤقت لقراءة أو تعيين كل بايت:
نسخة الكود كما يلي:
var buf = New Buffer (100) ؛
لـ (var i = 0 ؛ i <buf.length ؛ i ++) {
buf [i] = i ؛
}
يقوم الرمز أعلاه بإنشاء مخزن مؤقت جديد يحتوي على 100 بايت ويضع كل بايت في المخزن المؤقت من 0 إلى 99.
شريحة البيانات المخزنة
بمجرد إنشاء المخزن المؤقت أو استلامه ، قد تحتاج إلى استخراج جزء من البيانات المخزنة. يمكنك تقسيم المخزن المؤقت الموجود عن طريق تحديد موضع البداية لإنشاء مخزن مؤقت أصغر آخر:
نسخة الكود كما يلي:
var buffer = new Buffer ("هذا هو محتوى المخزن المؤقت الخاص بي") ؛
var أصغر buffer = buffer.slice (8 ، 19) ؛
console.log (أصغر buffer.toString ()) ؛ // -> "المحتوى"
لاحظ أنه عند تقسيم المخزن المؤقت ، لا يتم تخصيص أو نسخ ذاكرة جديدة. يستخدم المخزن المؤقت الجديد ذاكرة العازلة الأصل ، وهي مجرد مرجع إلى جزء معين من البيانات (المحددة بواسطة موضع البداية). هذا المقطع له عدة معاني.
أولاً ، إذا قام برنامجك بتعديل محتويات المخزن المؤقت للأصل ، فستؤثر هذه التعديلات أيضًا على المخازن المؤقتة للأطفال ذات الصلة ، لأن المخزن المؤقت الأصل والمخزن المؤقت للأطفال هما كائنات JavaScript مختلفة ، لذلك من السهل تجاهل هذه المشكلة وتؤدي إلى بعض الأخطاء المحتملة.
ثانياً ، عندما تقوم بإنشاء مخزن مؤقت للطفل الأصغر من المخزن المؤقت الأصل بهذه الطريقة ، سيظل كائن العازلة الأصل يتم الاحتفاظ به بعد الانتهاء من العملية ولن يتم جمع القمامة. إذا لم تكن حذراً ، فسيؤدي ذلك بسهولة إلى تسرب الذاكرة.
ملاحظة: إذا كنت قلقًا بشأن تسرب الذاكرة ، فيمكنك استخدام طريقة النسخ بدلاً من تشغيل Slice. ما يلي سوف يقدم نسخة.
نسخ البيانات المخزنة
يمكنك استخدام نسخ لنسخ جزء من المخزن المؤقت إلى مخزن مؤقت آخر مثل هذا:
نسخة الكود كما يلي:
var buffer1 = new Buffer ("هذا هو محتوى المخزن المؤقت الخاص بي") ؛
var buffer2 = New Buffer (11) ؛
var targetStart = 0 ؛
var sudcestart = 8 ؛
var sourceend = 19 ؛
Buffer1.copy (Buffer2 ، TargetStart ، SourCestart ، Soundend) ؛
console.log (buffer2.toString ()) ؛ // -> "المحتوى"
في الكود أعلاه ، انسخ البايتات من 9 إلى 20 من المخزن المؤقت للمصدر إلى موضع بداية المخزن المؤقت المستهدف.
فك تشفير البيانات المخزنة
يمكن تحويل البيانات المخزنة إلى سلسلة UTF-8 مثل هذا:
نسخة الكود كما يلي:
var str = buf.toString () ؛
يمكن أيضًا فك تشفير البيانات المخزنة في أي بيانات نوع الترميز عن طريق تحديد نوع الترميز. على سبيل المثال ، إذا كنت ترغب في فك تشفير المخزن المؤقت في سلسلة BASE64 ، فيمكنك القيام بذلك:
نسخة الكود كما يلي:
var b64str = buf.ToString ("base64") ؛
باستخدام وظيفة toString ، يمكنك أيضًا نقل سلسلة UTF-8 إلى سلسلة BASE64:
نسخة الكود كما يلي:
var utf8string = 'سلسلة بلدي' ؛
var buf = عازلة جديدة (UTF8String) ؛
var base64string = buf.ToString ('base64')
ملخص
في بعض الأحيان ، يتعين عليك التعامل مع البيانات الثنائية ، لكن JavaScript الأصلية لا تملك طريقة واضحة للقيام بذلك ، لذلك توفر Node فئة مخزنة تغلف بعض العمليات لكتل الذاكرة المستمرة. يمكنك تقسيم أو نسخ بيانات الذاكرة بين اثنين من المخازن المؤقتة.
يمكنك أيضًا تحويل المخزن المؤقت إلى نوع من السلسلة المشفرة ، أو بدوره ، تحويل سلسلة إلى مخزن مؤقت للوصول أو معالجة كل بت.