Buffer
[مستقر: 2 - مستقر]
مستقر: 2 الاستقرار: 2 - مستقر
كود المصدر: lib/buffer.js
تُستخدم كائنات Buffer لتمثيل سلسلة ذات طول ثابت من البايتات. تدعم العديد من واجهات برمجة التطبيقات (APIs) الخاصة بـ Node.js كائنات Buffer.
فئة Buffer هي فئة فرعية من فئة JavaScript Uint8Array وتوسعها بطرق تغطي حالات استخدام إضافية. تقبل واجهات برمجة التطبيقات (APIs) الخاصة بـ Node.js كائنات Uint8Array العادية حيث يتم دعم كائنات Buffer أيضًا.
في حين أن فئة Buffer متاحة ضمن النطاق العام، إلا أنه لا يزال من المستحسن الرجوع إليها بشكل صريح عبر عبارة استيراد أو طلب.
import { Buffer } from 'node:buffer';
// إنشاء Buffer مملوءة بالأصفار بطول 10.
const buf1 = Buffer.alloc(10);
// إنشاء Buffer بطول 10،
// مملوءة ببايتات لها القيمة `1`.
const buf2 = Buffer.alloc(10, 1);
// إنشاء buffer غير مهيأة بطول 10.
// هذا أسرع من استدعاء Buffer.alloc() ولكن المثيل
// Buffer الذي تم إرجاعه قد يحتوي على بيانات قديمة يجب
// الكتابة فوقها باستخدام fill() أو write() أو وظائف أخرى تملأ محتويات Buffer.
const buf3 = Buffer.allocUnsafe(10);
// إنشاء Buffer تحتوي على البايتات [1, 2, 3].
const buf4 = Buffer.from([1, 2, 3]);
// إنشاء Buffer تحتوي على البايتات [1, 1, 1, 1] – الإدخالات
// يتم اقتطاعها جميعًا باستخدام `(value & 255)` لتناسب النطاق 0-255.
const buf5 = Buffer.from([257, 257.5, -255, '1']);
// إنشاء Buffer تحتوي على البايتات المشفرة بـ UTF-8 للسلسلة 'tést':
// [0x74, 0xc3, 0xa9, 0x73, 0x74] (بالتدوين الست عشري)
// [116, 195, 169, 115, 116] (بالتدوين العشري)
const buf6 = Buffer.from('tést');
// إنشاء Buffer تحتوي على بايتات Latin-1 [0x74, 0xe9, 0x73, 0x74].
const buf7 = Buffer.from('tést', 'latin1');const { Buffer } = require('node:buffer');
// إنشاء Buffer مملوءة بالأصفار بطول 10.
const buf1 = Buffer.alloc(10);
// إنشاء Buffer بطول 10،
// مملوءة ببايتات لها القيمة `1`.
const buf2 = Buffer.alloc(10, 1);
// إنشاء buffer غير مهيأة بطول 10.
// هذا أسرع من استدعاء Buffer.alloc() ولكن المثيل
// Buffer الذي تم إرجاعه قد يحتوي على بيانات قديمة يجب
// الكتابة فوقها باستخدام fill() أو write() أو وظائف أخرى تملأ محتويات Buffer.
const buf3 = Buffer.allocUnsafe(10);
// إنشاء Buffer تحتوي على البايتات [1, 2, 3].
const buf4 = Buffer.from([1, 2, 3]);
// إنشاء Buffer تحتوي على البايتات [1, 1, 1, 1] – الإدخالات
// يتم اقتطاعها جميعًا باستخدام `(value & 255)` لتناسب النطاق 0-255.
const buf5 = Buffer.from([257, 257.5, -255, '1']);
// إنشاء Buffer تحتوي على البايتات المشفرة بـ UTF-8 للسلسلة 'tést':
// [0x74, 0xc3, 0xa9, 0x73, 0x74] (بالتدوين الست عشري)
// [116, 195, 169, 115, 116] (بالتدوين العشري)
const buf6 = Buffer.from('tést');
// إنشاء Buffer تحتوي على بايتات Latin-1 [0x74, 0xe9, 0x73, 0x74].
const buf7 = Buffer.from('tést', 'latin1');المخازن المؤقتة وتشفيرات الأحرف
[التاريخ]
| الإصدار | التغييرات |
|---|---|
| الإصدار 15.7.0، الإصدار 14.18.0 | تم تقديم تشفير base64url. |
| الإصدار 6.4.0 | تم تقديم latin1 كاسم مستعار لـ binary. |
| الإصدار 5.0.0 | تمت إزالة التشفيرين المهملين raw و raws. |
عند التحويل بين Buffer والسلاسل النصية، يمكن تحديد تشفير الأحرف. إذا لم يتم تحديد تشفير الأحرف، فسيتم استخدام UTF-8 كإعداد افتراضي.
import { Buffer } from 'node:buffer';
const buf = Buffer.from('hello world', 'utf8');
console.log(buf.toString('hex'));
// Prints: 68656c6c6f20776f726c64
console.log(buf.toString('base64'));
// Prints: aGVsbG8gd29ybGQ=
console.log(Buffer.from('fhqwhgads', 'utf8'));
// Prints: <Buffer 66 68 71 77 68 67 61 64 73>
console.log(Buffer.from('fhqwhgads', 'utf16le'));
// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>const { Buffer } = require('node:buffer');
const buf = Buffer.from('hello world', 'utf8');
console.log(buf.toString('hex'));
// Prints: 68656c6c6f20776f726c64
console.log(buf.toString('base64'));
// Prints: aGVsbG8gd29ybGQ=
console.log(Buffer.from('fhqwhgads', 'utf8'));
// Prints: <Buffer 66 68 71 77 68 67 61 64 73>
console.log(Buffer.from('fhqwhgads', 'utf16le'));
// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>تقبل مخازن Node.js المؤقتة جميع اختلافات حالة سلاسل التشفير التي تتلقاها. على سبيل المثال، يمكن تحديد UTF-8 كـ 'utf8' أو 'UTF8' أو 'uTf8'.
تشفيرات الأحرف المدعومة حاليًا بواسطة Node.js هي:
'utf8'(اسم مستعار:'utf-8'): أحرف Unicode مشفرة متعددة البايت. تستخدم العديد من صفحات الويب وتنسيقات المستندات الأخرى UTF-8. هذا هو تشفير الأحرف الافتراضي. عند فك ترميزBufferإلى سلسلة لا تحتوي حصريًا على بيانات UTF-8 صالحة، سيتم استخدام حرف استبدال UnicodeU+FFFD� لتمثيل تلك الأخطاء.'utf16le'(اسم مستعار:'utf-16le'): أحرف Unicode مشفرة متعددة البايت. على عكس'utf8'، سيتم ترميز كل حرف في السلسلة باستخدام 2 أو 4 بايتات. يدعم Node.js فقط البديل little-endian لـ UTF-16.'latin1': يرمز Latin-1 إلى ISO-8859-1. يدعم هذا التشفير الأحرف Unicode فقط منU+0000إلىU+00FF. يتم ترميز كل حرف باستخدام بايت واحد. يتم اقتطاع الأحرف التي لا تتناسب مع هذا النطاق وسيتم تعيينها على أحرف في هذا النطاق.
يشار إلى تحويل Buffer إلى سلسلة باستخدام أحد الخيارات المذكورة أعلاه باسم فك التشفير، ويشار إلى تحويل سلسلة إلى Buffer باسم التشفير.
يدعم Node.js أيضًا تشفيرات ثنائية إلى نص التالية. بالنسبة إلى التشفيرات الثنائية إلى النص، يتم عكس اصطلاح التسمية: يشار عادةً إلى تحويل Buffer إلى سلسلة باسم التشفير، ويشار إلى تحويل سلسلة إلى Buffer باسم فك التشفير.
'base64': ترميز Base64. عند إنشاءBufferمن سلسلة، سيقبل هذا التشفير أيضًا بشكل صحيح "أبجدية آمنة لعنوان URL واسم الملف" كما هو محدد في RFC 4648، القسم 5. يتم تجاهل أحرف المسافة البيضاء مثل المسافات وعلامات التبويب والأسطر الجديدة الموجودة داخل سلسلة base64 المشفرة.'base64url': ترميز base64url كما هو محدد في RFC 4648، القسم 5. عند إنشاءBufferمن سلسلة، سيقبل هذا التشفير أيضًا بشكل صحيح سلاسل base64 المشفرة العادية. عند ترميزBufferإلى سلسلة، سيحذف هذا التشفير الحشو.'hex': ترميز كل بايت كحرفين سداسيين عشريين. قد يحدث اقتطاع البيانات عند فك ترميز السلاسل التي لا تتكون حصريًا من عدد زوجي من الأحرف السداسية العشرية. انظر أدناه للحصول على مثال.
تشفيرات الأحرف القديمة التالية مدعومة أيضًا:
'ascii': لبيانات ASCII ذات 7 بت فقط. عند ترميز سلسلة إلىBuffer، يكون هذا مكافئًا لاستخدام'latin1'. عند فك ترميزBufferإلى سلسلة، سيؤدي استخدام هذا التشفير أيضًا إلى إلغاء تعيين البت الأعلى من كل بايت قبل فك الترميز كـ'latin1'. بشكل عام، لا ينبغي أن يكون هناك سبب لاستخدام هذا التشفير، لأن'utf8'(أو، إذا كان من المعروف أن البيانات دائمًا ASCII فقط،'latin1') سيكون خيارًا أفضل عند ترميز أو فك ترميز نص ASCII فقط. يتم توفيره فقط للتوافق القديم.'binary': اسم مستعار لـ'latin1'. يمكن أن يكون اسم هذا التشفير مضللاً للغاية، حيث أن جميع التشفيرات المدرجة هنا تحول بين السلاسل والبيانات الثنائية. للتحويل بين السلاسل وBuffers، عادةً ما يكون'utf8'هو الخيار الصحيح.'ucs2','ucs-2': أسماء مستعارة لـ'utf16le'. اعتادت UCS-2 الإشارة إلى متغير من UTF-16 لم يدعم الأحرف التي تحتوي على نقاط رمز أكبر من U+FFFF. في Node.js، يتم دائمًا دعم نقاط الرمز هذه.
import { Buffer } from 'node:buffer';
Buffer.from('1ag123', 'hex');
// Prints <Buffer 1a>، يتم اقتطاع البيانات عند أول قيمة غير سداسية عشرية
// ('g') تمت مواجهتها.
Buffer.from('1a7', 'hex');
// Prints <Buffer 1a>، يتم اقتطاع البيانات عندما تنتهي البيانات برقم فردي ('7').
Buffer.from('1634', 'hex');
// Prints <Buffer 16 34>، يتم تمثيل جميع البيانات.const { Buffer } = require('node:buffer');
Buffer.from('1ag123', 'hex');
// Prints <Buffer 1a>، يتم اقتطاع البيانات عند أول قيمة غير سداسية عشرية
// ('g') تمت مواجهتها.
Buffer.from('1a7', 'hex');
// Prints <Buffer 1a>، يتم اقتطاع البيانات عندما تنتهي البيانات برقم فردي ('7').
Buffer.from('1634', 'hex');
// Prints <Buffer 16 34>، يتم تمثيل جميع البيانات.تتبع متصفحات الويب الحديثة معيار ترميز WHATWG الذي يربط كلا من 'latin1' و 'ISO-8859-1' بـ 'win-1252'. هذا يعني أنه أثناء القيام بشيء مثل http.get()، إذا كانت مجموعة الأحرف التي تم إرجاعها هي إحدى تلك المدرجة في مواصفات WHATWG، فمن المحتمل أن يكون الخادم قد أرجع بالفعل بيانات مشفرة بـ 'win-1252'، وقد يؤدي استخدام ترميز 'latin1' إلى فك ترميز الأحرف بشكل غير صحيح.
المخازن المؤقتة والمصفوفات المكتوبة
[تاريخ]
| الإصدار | التغييرات |
|---|---|
| الإصدار 3.0.0 | يرث صنف Buffer الآن من Uint8Array. |
تعتبر مثيلات Buffer أيضًا مثيلات JavaScript لـ Uint8Array و TypedArray. تتوفر جميع طرق TypedArray على Buffers. ومع ذلك، هناك اختلافات دقيقة بين واجهة برمجة تطبيقات Buffer وواجهة برمجة تطبيقات TypedArray.
على وجه الخصوص:
- بينما
TypedArray.prototype.slice()تنشئ نسخة من جزء منTypedArray، فإنBuffer.prototype.slice()تنشئ عرضًا علىBufferالموجودة بدون نسخ. قد يكون هذا السلوك مفاجئًا، ولا يوجد إلا للتوافق مع الإصدارات القديمة. يمكن استخدامTypedArray.prototype.subarray()لتحقيق سلوكBuffer.prototype.slice()على كل منBuffers وTypedArrays الأخرى ويجب تفضيلها. buf.toString()غير متوافق مع مكافئه فيTypedArray.- يدعم عدد من الطرق، على سبيل المثال
buf.indexOf()، وسائط إضافية.
هناك طريقتان لإنشاء مثيلات TypedArray جديدة من Buffer:
- سيؤدي تمرير
Bufferإلى مُنشئTypedArrayإلى نسخ محتوياتBuffer، وتفسيرها كمجموعة من الأعداد الصحيحة، وليس كسلسلة بايت من النوع الهدف.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3, 4]);
const uint32array = new Uint32Array(buf);
console.log(uint32array);
// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3, 4]);
const uint32array = new Uint32Array(buf);
console.log(uint32array);
// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]- سيؤدي تمرير
ArrayBufferالأساسي لـBufferإلى إنشاءTypedArrayتشترك في ذاكرتها معBuffer.
import { Buffer } from 'node:buffer';
const buf = Buffer.from('hello', 'utf16le');
const uint16array = new Uint16Array(
buf.buffer,
buf.byteOffset,
buf.length / Uint16Array.BYTES_PER_ELEMENT);
console.log(uint16array);
// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ]const { Buffer } = require('node:buffer');
const buf = Buffer.from('hello', 'utf16le');
const uint16array = new Uint16Array(
buf.buffer,
buf.byteOffset,
buf.length / Uint16Array.BYTES_PER_ELEMENT);
console.log(uint16array);
// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ]من الممكن إنشاء Buffer جديد يشارك نفس الذاكرة المخصصة مثل مثيل TypedArray باستخدام خاصية .buffer لكائن TypedArray بنفس الطريقة. يتصرف Buffer.from() مثل new Uint8Array() في هذا السياق.
import { Buffer } from 'node:buffer';
const arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
// Copies the contents of `arr`.
const buf1 = Buffer.from(arr);
// Shares memory with `arr`.
const buf2 = Buffer.from(arr.buffer);
console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 a0 0f>
arr[1] = 6000;
console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 70 17>const { Buffer } = require('node:buffer');
const arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
// Copies the contents of `arr`.
const buf1 = Buffer.from(arr);
// Shares memory with `arr`.
const buf2 = Buffer.from(arr.buffer);
console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 a0 0f>
arr[1] = 6000;
console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 70 17>عند إنشاء Buffer باستخدام .buffer الخاص بـ TypedArray، من الممكن استخدام جزء فقط من ArrayBuffer الأساسي عن طريق تمرير معلمات byteOffset و length.
import { Buffer } from 'node:buffer';
const arr = new Uint16Array(20);
const buf = Buffer.from(arr.buffer, 0, 16);
console.log(buf.length);
// Prints: 16const { Buffer } = require('node:buffer');
const arr = new Uint16Array(20);
const buf = Buffer.from(arr.buffer, 0, 16);
console.log(buf.length);
// Prints: 16لدى Buffer.from() و TypedArray.from() تواقيع وتنفيذات مختلفة. على وجه التحديد، تقبل متغيرات TypedArray وسيطة ثانية هي دالة تعيين يتم استدعاؤها على كل عنصر من عناصر المصفوفة المكتوبة:
TypedArray.from(source[, mapFn[, thisArg]])
ومع ذلك، لا تدعم طريقة Buffer.from() استخدام دالة التعيين:
Buffer.from(array)Buffer.from(buffer)Buffer.from(arrayBuffer[, byteOffset[, length]])Buffer.from(string[, encoding])
المخازن المؤقتة والتكرار
يمكن تكرار مثيلات Buffer باستخدام بناء الجملة for..of:
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3]);
for (const b of buf) {
console.log(b);
}
// Prints:
// 1
// 2
// 3const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3]);
for (const b of buf) {
console.log(b);
}
// Prints:
// 1
// 2
// 3بالإضافة إلى ذلك، يمكن استخدام الطرق buf.values() و buf.keys() و buf.entries() لإنشاء مكررات.
الفئة: Blob
[السجل]
| الإصدار | التغييرات |
|---|---|
| v18.0.0, v16.17.0 | لم تعد تجريبية. |
| v15.7.0, v14.18.0 | تمت الإضافة في: v15.7.0, v14.18.0 |
تغلف Blob بيانات أولية غير قابلة للتغيير يمكن مشاركتها بأمان عبر سلاسل عامل متعددة.
new buffer.Blob([sources[, options]])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v16.7.0 | تمت إضافة خيار endings القياسي لاستبدال نهايات الأسطر، وإزالة خيار encoding غير القياسي. |
| v15.7.0, v14.18.0 | تمت الإضافة في: v15.7.0, v14.18.0 |
sources<string[]> | <ArrayBuffer[]> | <TypedArray[]> | <DataView[]> | <Blob[]> مصفوفة من الكائنات string أو <ArrayBuffer> أو <TypedArray> أو <DataView> أو <Blob>، أو أي مزيج من هذه الكائنات، والتي سيتم تخزينها داخلBlob.options<Object>endings<string> إما'transparent'أو'native'. عند التعيين إلى'native'، سيتم تحويل نهايات الأسطر في أجزاء مصدر السلسلة إلى نهاية السطر الأصلية للنظام الأساسي كما هو محدد بواسطةrequire('node:os').EOL.type<string> نوع محتوى Blob. الغرض هو أن ينقلtypeنوع وسائط MIME للبيانات، ولكن لا يتم إجراء أي تحقق من صحة تنسيق النوع.
ينشئ كائن Blob جديدًا يحتوي على تسلسل للمصادر المحددة.
يتم نسخ مصادر <ArrayBuffer> و <TypedArray> و <DataView> و <Buffer> إلى 'Blob' وبالتالي يمكن تعديلها بأمان بعد إنشاء 'Blob'.
يتم ترميز مصادر السلسلة كسلاسل بايت UTF-8 ونسخها إلى Blob. سيتم استبدال أزواج الاستبدال غير المتطابقة داخل كل جزء سلسلة بأحرف الاستبدال Unicode U+FFFD.
blob.arrayBuffer()
أُضيف في: v15.7.0, v14.18.0
- الإرجاع: <Promise>
يُرجع وعدًا يتحقق مع <ArrayBuffer> يحتوي على نسخة من بيانات Blob.
blob.bytes()
أُضيف في: v22.3.0, v20.16.0
تُرجع الطريقة blob.bytes() بايتات كائن Blob كـ Promise\<Uint8Array\>.
const blob = new Blob(['hello']);
blob.bytes().then((bytes) => {
console.log(bytes); // Outputs: Uint8Array(5) [ 104, 101, 108, 108, 111 ]
});blob.size
أُضيف في: v15.7.0, v14.18.0
الحجم الكلي لـ Blob بالبايت.
blob.slice([start[, end[, type]]])
أُضيف في: v15.7.0, v14.18.0
يُنشئ ويُرجع Blob جديدًا يحتوي على مجموعة فرعية من بيانات كائن Blob هذا. لا يتم تغيير Blob الأصلي.
blob.stream()
أُضيف في: v16.7.0
- الإرجاع: <ReadableStream>
يُرجع ReadableStream جديدًا يسمح بقراءة محتوى Blob.
blob.text()
أُضيف في: v15.7.0, v14.18.0
- الإرجاع: <Promise>
يُرجع وعدًا يتحقق مع محتويات Blob التي تم فك ترميزها كسلسلة UTF-8.
blob.type
أُضيف في: v15.7.0, v14.18.0
- النوع: <string>
نوع المحتوى لـ Blob.
كائنات Blob و MessageChannel
بمجرد إنشاء كائن <Blob>، يمكن إرساله عبر MessagePort إلى وجهات متعددة دون نقل أو نسخ البيانات فورًا. يتم نسخ البيانات التي يحتوي عليها Blob فقط عند استدعاء الطرق arrayBuffer() أو text().
import { Blob } from 'node:buffer';
import { setTimeout as delay } from 'node:timers/promises';
const blob = new Blob(['hello there']);
const mc1 = new MessageChannel();
const mc2 = new MessageChannel();
mc1.port1.onmessage = async ({ data }) => {
console.log(await data.arrayBuffer());
mc1.port1.close();
};
mc2.port1.onmessage = async ({ data }) => {
await delay(1000);
console.log(await data.arrayBuffer());
mc2.port1.close();
};
mc1.port2.postMessage(blob);
mc2.port2.postMessage(blob);
// The Blob is still usable after posting.
blob.text().then(console.log);const { Blob } = require('node:buffer');
const { setTimeout: delay } = require('node:timers/promises');
const blob = new Blob(['hello there']);
const mc1 = new MessageChannel();
const mc2 = new MessageChannel();
mc1.port1.onmessage = async ({ data }) => {
console.log(await data.arrayBuffer());
mc1.port1.close();
};
mc2.port1.onmessage = async ({ data }) => {
await delay(1000);
console.log(await data.arrayBuffer());
mc2.port1.close();
};
mc1.port2.postMessage(blob);
mc2.port2.postMessage(blob);
// The Blob is still usable after posting.
blob.text().then(console.log);الصنف: Buffer
الصنف Buffer هو نوع عام للتعامل مع البيانات الثنائية مباشرة. يمكن إنشاؤه بعدة طرق.
الطريقة الثابتة: Buffer.alloc(size[, fill[, encoding]])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v20.0.0 | رمي ERR_INVALID_ARG_TYPE أو ERR_OUT_OF_RANGE بدلاً من ERR_INVALID_ARG_VALUE لوسائط الإدخال غير الصالحة. |
| v15.0.0 | رمي ERR_INVALID_ARG_VALUE بدلاً من ERR_INVALID_OPT_VALUE لوسائط الإدخال غير الصالحة. |
| v10.0.0 | محاولة ملء مخزن مؤقت غير صفري بمخزن مؤقت بطول صفري يؤدي إلى استثناء يتم رميه. |
| v10.0.0 | تحديد سلسلة غير صالحة لـ fill يؤدي إلى استثناء يتم رميه. |
| v8.9.3 | تحديد سلسلة غير صالحة لـ fill يؤدي الآن إلى مخزن مؤقت مملوء بالأصفار. |
| v5.10.0 | تمت الإضافة في: v5.10.0 |
size<integer> الطول المطلوب لـBufferالجديد.fill<string> | <Buffer> | <Uint8Array> | <integer> قيمة لملءBufferالجديد بها مسبقًا. الافتراضي:0.encoding<string> إذا كانتfillسلسلة، فهذا هو ترميزها. الافتراضي:'utf8'.- الإرجاع: <Buffer>
يخصص Buffer جديدًا بحجم size بايت. إذا كانت fill غير معرّفة، فسيتم ملء Buffer بالأصفار.
import { Buffer } from 'node:buffer';
const buf = Buffer.alloc(5);
console.log(buf);
// Prints: <Buffer 00 00 00 00 00>const { Buffer } = require('node:buffer');
const buf = Buffer.alloc(5);
console.log(buf);
// Prints: <Buffer 00 00 00 00 00>إذا كان size أكبر من buffer.constants.MAX_LENGTH أو أصغر من 0، فسيتم رمي ERR_OUT_OF_RANGE.
إذا تم تحديد fill، فسيتم تهيئة Buffer المخصص عن طريق استدعاء buf.fill(fill).
import { Buffer } from 'node:buffer';
const buf = Buffer.alloc(5, 'a');
console.log(buf);
// Prints: <Buffer 61 61 61 61 61>const { Buffer } = require('node:buffer');
const buf = Buffer.alloc(5, 'a');
console.log(buf);
// Prints: <Buffer 61 61 61 61 61>إذا تم تحديد كل من fill و encoding، فسيتم تهيئة Buffer المخصص عن طريق استدعاء buf.fill(fill, encoding).
import { Buffer } from 'node:buffer';
const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
console.log(buf);
// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>const { Buffer } = require('node:buffer');
const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
console.log(buf);
// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>قد يكون استدعاء Buffer.alloc() أبطأ بشكل ملحوظ من البديل Buffer.allocUnsafe() ولكنه يضمن أن محتويات مثيل Buffer الذي تم إنشاؤه حديثًا لن تحتوي أبدًا على بيانات حساسة من التخصيصات السابقة، بما في ذلك البيانات التي قد لا تكون مخصصة لـ Buffers.
سيتم رمي TypeError إذا لم يكن size رقمًا.
طريقة ثابتة: Buffer.allocUnsafe(size)
[السجل]
| الإصدار | التغييرات |
|---|---|
| v20.0.0 | إلقاء ERR_INVALID_ARG_TYPE أو ERR_OUT_OF_RANGE بدلاً من ERR_INVALID_ARG_VALUE لوسائط إدخال غير صالحة. |
| v15.0.0 | إلقاء ERR_INVALID_ARG_VALUE بدلاً من ERR_INVALID_OPT_VALUE لوسائط إدخال غير صالحة. |
| v7.0.0 | تمرير size سالبة سيؤدي الآن إلى إلقاء خطأ. |
| v5.10.0 | تمت إضافتها في: v5.10.0 |
يخصص Buffer جديدًا بحجم size بايت. إذا كان size أكبر من buffer.constants.MAX_LENGTH أو أصغر من 0، فسيتم إلقاء ERR_OUT_OF_RANGE.
الذاكرة الأساسية لمثيلات Buffer التي تم إنشاؤها بهذه الطريقة غير مهيأة. محتويات Buffer التي تم إنشاؤها حديثًا غير معروفة و قد تحتوي على بيانات حساسة. استخدم Buffer.alloc() بدلاً من ذلك لتهيئة مثيلات Buffer بالأصفار.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(10);
console.log(buf);
// طباعة (قد تختلف المحتويات): <Buffer a0 8b 28 3f 01 00 00 00 50 32>
buf.fill(0);
console.log(buf);
// طباعة: <Buffer 00 00 00 00 00 00 00 00 00 00>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(10);
console.log(buf);
// طباعة (قد تختلف المحتويات): <Buffer a0 8b 28 3f 01 00 00 00 50 32>
buf.fill(0);
console.log(buf);
// طباعة: <Buffer 00 00 00 00 00 00 00 00 00 00>سيتم إلقاء TypeError إذا لم يكن size رقمًا.
تقوم وحدة Buffer بتخصيص مسبق لمثيل Buffer داخلي بحجم Buffer.poolSize يتم استخدامه كمجمع للتخصيص السريع لمثيلات Buffer الجديدة التي تم إنشاؤها باستخدام Buffer.allocUnsafe() و Buffer.from(array) و Buffer.from(string) و Buffer.concat() فقط عندما يكون size أقل من Buffer.poolSize \>\>\> 1 (أرضية Buffer.poolSize مقسومة على اثنين).
يعد استخدام مجمع الذاكرة الداخلية المخصص مسبقًا فرقًا رئيسيًا بين استدعاء Buffer.alloc(size, fill) مقابل Buffer.allocUnsafe(size).fill(fill). على وجه التحديد، Buffer.alloc(size, fill) لن يستخدم مجمع Buffer الداخلي أبدًا، بينما Buffer.allocUnsafe(size).fill(fill) سيستخدم مجمع Buffer الداخلي إذا كان size أقل من أو يساوي نصف Buffer.poolSize. الفرق دقيق ولكنه قد يكون مهمًا عندما يتطلب التطبيق الأداء الإضافي الذي توفره Buffer.allocUnsafe().
طريقة ثابتة: Buffer.allocUnsafeSlow(size)
[السجل]
| الإصدار | التغييرات |
|---|---|
| v20.0.0 | يتم إرسال ERR_INVALID_ARG_TYPE أو ERR_OUT_OF_RANGE بدلاً من ERR_INVALID_ARG_VALUE لإدخال وسيطات غير صالحة. |
| v15.0.0 | يتم إرسال ERR_INVALID_ARG_VALUE بدلاً من ERR_INVALID_OPT_VALUE لإدخال وسيطات غير صالحة. |
| v5.12.0 | تمت الإضافة في: v5.12.0 |
size<عدد صحيح> الطول المطلوب لـBufferالجديد.- الإرجاع: <Buffer>
يقوم بتخصيص Buffer جديد بحجم size بايت. إذا كان size أكبر من buffer.constants.MAX_LENGTH أو أصغر من 0، يتم إرسال ERR_OUT_OF_RANGE. يتم إنشاء Buffer ذو طول صفر إذا كان size هو 0.
الذاكرة الأساسية لمثيلات Buffer التي تم إنشاؤها بهذه الطريقة غير مهيأة. محتويات Buffer التي تم إنشاؤها حديثًا غير معروفة و قد تحتوي على بيانات حساسة. استخدم buf.fill(0) لتهيئة مثيلات Buffer هذه بالأصفار.
عند استخدام Buffer.allocUnsafe() لتخصيص مثيلات Buffer جديدة، يتم تقسيم التخصيصات الأقل من Buffer.poolSize \>\>\> 1 (4 كيلوبايت عند استخدام poolSize الافتراضي) من Buffer واحد مخصص مسبقًا. يتيح ذلك للتطبيقات تجنب الحمل الزائد لتجميع البيانات المهملة الناتج عن إنشاء العديد من مثيلات Buffer المخصصة بشكل فردي. يحسن هذا النهج كلاً من الأداء واستخدام الذاكرة عن طريق إلغاء الحاجة إلى تتبع وتنظيف العديد من كائنات ArrayBuffer الفردية.
ومع ذلك، في الحالة التي قد يحتاج فيها المطور إلى الاحتفاظ بجزء صغير من الذاكرة من تجمع لفترة غير محددة، قد يكون من المناسب إنشاء مثيل Buffer غير مجمع باستخدام Buffer.allocUnsafeSlow() ثم نسخ الأجزاء ذات الصلة.
import { Buffer } from 'node:buffer';
// Need to keep around a few small chunks of memory.
const store = [];
socket.on('readable', () => {
let data;
while (null !== (data = readable.read())) {
// Allocate for retained data.
const sb = Buffer.allocUnsafeSlow(10);
// Copy the data into the new allocation.
data.copy(sb, 0, 0, 10);
store.push(sb);
}
});const { Buffer } = require('node:buffer');
// Need to keep around a few small chunks of memory.
const store = [];
socket.on('readable', () => {
let data;
while (null !== (data = readable.read())) {
// Allocate for retained data.
const sb = Buffer.allocUnsafeSlow(10);
// Copy the data into the new allocation.
data.copy(sb, 0, 0, 10);
store.push(sb);
}
});سيتم إرسال TypeError إذا لم يكن size رقمًا.
طريقة ثابتة: Buffer.byteLength(string[, encoding])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v7.0.0 | سيؤدي تمرير إدخال غير صالح الآن إلى إطلاق خطأ. |
| v5.10.0 | يمكن الآن أن تكون المعلمة string أي TypedArray أو DataView أو ArrayBuffer. |
| v0.1.90 | أُضيف في: v0.1.90 |
string<string> | <Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <SharedArrayBuffer> قيمة لحساب الطول.encoding<string> إذا كانتstringسلسلة، فهذا هو ترميزها. الافتراضي:'utf8'.- الإرجاع: <integer> عدد البايتات الموجودة داخل
string.
تُرجع طول البايت لسلسلة عند ترميزها باستخدام encoding. هذا ليس نفس String.prototype.length، والذي لا يأخذ في الاعتبار الترميز المستخدم لتحويل السلسلة إلى بايتات.
بالنسبة إلى 'base64' و 'base64url' و 'hex'، تفترض هذه الدالة إدخالاً صالحًا. بالنسبة إلى السلاسل التي تحتوي على بيانات غير مشفرة بـ base64/hex (على سبيل المثال، مساحة بيضاء)، قد تكون القيمة المرجعة أكبر من طول Buffer التي تم إنشاؤها من السلسلة.
import { Buffer } from 'node:buffer';
const str = '\u00bd + \u00bc = \u00be';
console.log(`${str}: ${str.length} characters, ` +
`${Buffer.byteLength(str, 'utf8')} bytes`);
// Prints: ½ + ¼ = ¾: 9 characters, 12 bytesconst { Buffer } = require('node:buffer');
const str = '\u00bd + \u00bc = \u00be';
console.log(`${str}: ${str.length} characters, ` +
`${Buffer.byteLength(str, 'utf8')} bytes`);
// Prints: ½ + ¼ = ¾: 9 characters, 12 bytesعندما تكون string عبارة عن Buffer/DataView/TypedArray/ArrayBuffer/ SharedArrayBuffer، يتم إرجاع طول البايت كما تم الإبلاغ عنه بواسطة .byteLength.
طريقة ثابتة: Buffer.compare(buf1, buf2)
[التاريخ]
| الإصدار | التغييرات |
|---|---|
| v8.0.0 | يمكن أن تكون الوسيطات الآن Uint8Arrays. |
| v0.11.13 | تمت الإضافة في: v0.11.13 |
buf1<Buffer> | <Uint8Array>buf2<Buffer> | <Uint8Array>- الإرجاع: <integer> إما
-1أو0أو1، اعتمادًا على نتيجة المقارنة. راجعbuf.compare()للحصول على التفاصيل.
يقارن buf1 بـ buf2 ، عادةً لغرض فرز صفائف مثيلات Buffer. هذا يعادل استدعاء buf1.compare(buf2).
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from('1234');
const buf2 = Buffer.from('0123');
const arr = [buf1, buf2];
console.log(arr.sort(Buffer.compare));
// يطبع: [ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ]
// (هذه النتيجة تساوي: [buf2, buf1].)const { Buffer } = require('node:buffer');
const buf1 = Buffer.from('1234');
const buf2 = Buffer.from('0123');
const arr = [buf1, buf2];
console.log(arr.sort(Buffer.compare));
// يطبع: [ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ]
// (هذه النتيجة تساوي: [buf2, buf1].)طريقة ثابتة: Buffer.concat(list[, totalLength])
[التاريخ]
| الإصدار | التغييرات |
|---|---|
| v8.0.0 | يمكن أن تكون عناصر list الآن Uint8Arrays. |
| v0.7.11 | تمت الإضافة في: v0.7.11 |
list<Buffer[]> | <Uint8Array[]> قائمة مثيلاتBufferأوUint8Arrayلربطها.totalLength<integer> الطول الإجمالي لمثيلاتBufferفيlistعند ربطها.- الإرجاع: <Buffer>
إرجاع Buffer جديد وهو نتيجة ربط جميع مثيلات Buffer في list معًا.
إذا كانت القائمة لا تحتوي على عناصر ، أو إذا كان totalLength هو 0 ، فسيتم إرجاع Buffer جديد بطول صفري.
إذا لم يتم توفير totalLength ، فسيتم حسابه من مثيلات Buffer في list عن طريق إضافة أطوالها.
إذا تم توفير totalLength ، فسيتم تحويله إلى عدد صحيح غير موقع. إذا تجاوز الطول المجمع لـ Buffers في list totalLength ، فسيتم اقتطاع النتيجة إلى totalLength. إذا كان الطول المجمع لـ Buffers في list أقل من totalLength ، فسيتم ملء المساحة المتبقية بالأصفار.
import { Buffer } from 'node:buffer';
// إنشاء `Buffer` واحد من قائمة من ثلاث مثيلات `Buffer`.
const buf1 = Buffer.alloc(10);
const buf2 = Buffer.alloc(14);
const buf3 = Buffer.alloc(18);
const totalLength = buf1.length + buf2.length + buf3.length;
console.log(totalLength);
// يطبع: 42
const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);
console.log(bufA);
// يطبع: <Buffer 00 00 00 00 ...>
console.log(bufA.length);
// يطبع: 42const { Buffer } = require('node:buffer');
// إنشاء `Buffer` واحد من قائمة من ثلاث مثيلات `Buffer`.
const buf1 = Buffer.alloc(10);
const buf2 = Buffer.alloc(14);
const buf3 = Buffer.alloc(18);
const totalLength = buf1.length + buf2.length + buf3.length;
console.log(totalLength);
// يطبع: 42
const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);
console.log(bufA);
// يطبع: <Buffer 00 00 00 00 ...>
console.log(bufA.length);
// يطبع: 42قد تستخدم Buffer.concat() أيضًا تجمع Buffer الداخلي مثل Buffer.allocUnsafe().
طريقة ثابتة: Buffer.copyBytesFrom(view[, offset[, length]])
أضيفت في: الإصدار v19.8.0، الإصدار v18.16.0
view<TypedArray> <TypedArray> المراد نسخه.offset<integer> الإزاحة الأولية داخلview. افتراضي:0.length<integer> عدد العناصر المراد نسخها منview. افتراضي:view.length - offset.- إرجاع: <Buffer>
ينسخ الذاكرة الأساسية لـ view إلى Buffer جديدة.
const u16 = new Uint16Array([0, 0xffff]);
const buf = Buffer.copyBytesFrom(u16, 1, 1);
u16[1] = 0;
console.log(buf.length); // 2
console.log(buf[0]); // 255
console.log(buf[1]); // 255طريقة ثابتة: Buffer.from(array)
أضيفت في: الإصدار v5.10.0
array<integer[]>- إرجاع: <Buffer>
يخصص Buffer جديدة باستخدام array من البايتات في النطاق 0 - 255. سيتم اقتطاع إدخالات المصفوفة خارج هذا النطاق لتناسبه.
import { Buffer } from 'node:buffer';
// ينشئ Buffer جديدة تحتوي على بايتات UTF-8 للسلسلة 'buffer'.
const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);const { Buffer } = require('node:buffer');
// ينشئ Buffer جديدة تحتوي على بايتات UTF-8 للسلسلة 'buffer'.
const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);إذا كان array كائنًا يشبه Array (أي، كائنًا له خاصية length من النوع number)، فسيتم التعامل معه كما لو كان مصفوفة، إلا إذا كان Buffer أو Uint8Array. هذا يعني أن جميع متغيرات TypedArray الأخرى يتم التعامل معها على أنها Array. لإنشاء Buffer من البايتات التي تدعم TypedArray، استخدم Buffer.copyBytesFrom().
سيتم طرح TypeError إذا لم تكن array عبارة عن Array أو نوع آخر مناسب لمتغيرات Buffer.from().
قد تستخدم Buffer.from(array) و Buffer.from(string) أيضًا مجمع Buffer الداخلي مثلما تفعل Buffer.allocUnsafe().
طريقة ثابتة: Buffer.from(arrayBuffer[, byteOffset[, length]])
أُضيف في: v5.10.0
arrayBuffer<ArrayBuffer> | <SharedArrayBuffer>ArrayBufferأوSharedArrayBuffer، على سبيل المثال خاصية.bufferالخاصة بـTypedArray.byteOffset<عدد صحيح> فهرس أول بايت ليتم عرضه. افتراضي:0.length<عدد صحيح> عدد البايتات المراد عرضها. افتراضي:arrayBuffer.byteLength - byteOffset.- الإرجاع: <Buffer>
يقوم هذا بإنشاء عرض لـ ArrayBuffer بدون نسخ الذاكرة الأساسية. على سبيل المثال، عند تمرير مرجع إلى الخاصية .buffer لمثيل TypedArray، ستشارك Buffer التي تم إنشاؤها حديثًا نفس الذاكرة المخصصة مثل ArrayBuffer الأساسية لـ TypedArray.
import { Buffer } from 'node:buffer';
const arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
// تشارك الذاكرة مع `arr`.
const buf = Buffer.from(arr.buffer);
console.log(buf);
// يطبع: <Buffer 88 13 a0 0f>
// تغيير Uint16Array الأصلي يغير Buffer أيضًا.
arr[1] = 6000;
console.log(buf);
// يطبع: <Buffer 88 13 70 17>const { Buffer } = require('node:buffer');
const arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
// تشارك الذاكرة مع `arr`.
const buf = Buffer.from(arr.buffer);
console.log(buf);
// يطبع: <Buffer 88 13 a0 0f>
// تغيير Uint16Array الأصلي يغير Buffer أيضًا.
arr[1] = 6000;
console.log(buf);
// يطبع: <Buffer 88 13 70 17>تحدد الوسيطتان الاختياريتان byteOffset و length نطاق ذاكرة داخل arrayBuffer سيتم مشاركته بواسطة Buffer.
import { Buffer } from 'node:buffer';
const ab = new ArrayBuffer(10);
const buf = Buffer.from(ab, 0, 2);
console.log(buf.length);
// يطبع: 2const { Buffer } = require('node:buffer');
const ab = new ArrayBuffer(10);
const buf = Buffer.from(ab, 0, 2);
console.log(buf.length);
// يطبع: 2سيتم طرح TypeError إذا لم يكن arrayBuffer هو ArrayBuffer أو SharedArrayBuffer أو نوع آخر مناسب لمتغيرات Buffer.from().
من المهم أن نتذكر أن ArrayBuffer الداعم يمكن أن يغطي نطاقًا من الذاكرة يمتد خارج حدود عرض TypedArray. قد يمتد Buffer جديد تم إنشاؤه باستخدام الخاصية buffer الخاصة بـ TypedArray خارج نطاق TypedArray:
import { Buffer } from 'node:buffer';
const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 عناصر
const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 عناصر
console.log(arrA.buffer === arrB.buffer); // صحيح
const buf = Buffer.from(arrB.buffer);
console.log(buf);
// يطبع: <Buffer 63 64 65 66>const { Buffer } = require('node:buffer');
const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 عناصر
const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 عناصر
console.log(arrA.buffer === arrB.buffer); // صحيح
const buf = Buffer.from(arrB.buffer);
console.log(buf);
// يطبع: <Buffer 63 64 65 66>طريقة ثابتة: Buffer.from(buffer)
أضيفت في: v5.10.0
buffer<Buffer> | <Uint8Array>Bufferموجود أوUint8Arrayلنسخ البيانات منه.- إرجاع: <Buffer>
ينسخ بيانات buffer التي تم تمريرها إلى نسخة Buffer جديدة.
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from('buffer');
const buf2 = Buffer.from(buf1);
buf1[0] = 0x61;
console.log(buf1.toString());
// Prints: auffer
console.log(buf2.toString());
// Prints: bufferconst { Buffer } = require('node:buffer');
const buf1 = Buffer.from('buffer');
const buf2 = Buffer.from(buf1);
buf1[0] = 0x61;
console.log(buf1.toString());
// Prints: auffer
console.log(buf2.toString());
// Prints: bufferسيتم طرح TypeError إذا لم يكن buffer هو Buffer أو نوع آخر مناسب لمتغيرات Buffer.from().
طريقة ثابتة: Buffer.from(object[, offsetOrEncoding[, length]])
أضيفت في: v8.2.0
object<Object> كائن يدعمSymbol.toPrimitiveأوvalueOf().offsetOrEncoding<integer> | <string> إزاحة بايت أو ترميز.length<integer> طول.- إرجاع: <Buffer>
بالنسبة للكائنات التي تُرجع دالة valueOf() الخاصة بها قيمة لا تساوي object تمامًا، تُرجع Buffer.from(object.valueOf(), offsetOrEncoding, length).
import { Buffer } from 'node:buffer';
const buf = Buffer.from(new String('this is a test'));
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>const { Buffer } = require('node:buffer');
const buf = Buffer.from(new String('this is a test'));
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>بالنسبة للكائنات التي تدعم Symbol.toPrimitive، تُرجع Buffer.from(object[Symbol.toPrimitive]('string'), offsetOrEncoding).
import { Buffer } from 'node:buffer';
class Foo {
[Symbol.toPrimitive]() {
return 'this is a test';
}
}
const buf = Buffer.from(new Foo(), 'utf8');
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>const { Buffer } = require('node:buffer');
class Foo {
[Symbol.toPrimitive]() {
return 'this is a test';
}
}
const buf = Buffer.from(new Foo(), 'utf8');
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>سيتم طرح TypeError إذا لم يكن لدى object الطرق المذكورة أو لم يكن من نوع آخر مناسب لمتغيرات Buffer.from().
طريقة ثابتة: Buffer.from(string[, encoding])
أُضيفت في: v5.10.0
ينشئ Buffer جديدًا يحتوي على string. تحدد المعلمة encoding ترميز الأحرف الذي سيتم استخدامه عند تحويل string إلى بايتات.
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from('this is a tést');
const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
console.log(buf1.toString());
// Prints: this is a tést
console.log(buf2.toString());
// Prints: this is a tést
console.log(buf1.toString('latin1'));
// Prints: this is a téstconst { Buffer } = require('node:buffer');
const buf1 = Buffer.from('this is a tést');
const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
console.log(buf1.toString());
// Prints: this is a tést
console.log(buf2.toString());
// Prints: this is a tést
console.log(buf1.toString('latin1'));
// Prints: this is a téstسيتم طرح TypeError إذا لم تكن string سلسلة نصية أو نوعًا آخر مناسبًا لمتغيرات Buffer.from().
قد تستخدم Buffer.from(string) أيضًا مجموعة Buffer الداخلية مثلما يفعل Buffer.allocUnsafe().
طريقة ثابتة: Buffer.isBuffer(obj)
أُضيفت في: v0.1.101
تُرجع true إذا كان obj هو Buffer، و false بخلاف ذلك.
import { Buffer } from 'node:buffer';
Buffer.isBuffer(Buffer.alloc(10)); // true
Buffer.isBuffer(Buffer.from('foo')); // true
Buffer.isBuffer('a string'); // false
Buffer.isBuffer([]); // false
Buffer.isBuffer(new Uint8Array(1024)); // falseconst { Buffer } = require('node:buffer');
Buffer.isBuffer(Buffer.alloc(10)); // true
Buffer.isBuffer(Buffer.from('foo')); // true
Buffer.isBuffer('a string'); // false
Buffer.isBuffer([]); // false
Buffer.isBuffer(new Uint8Array(1024)); // falseطريقة ثابتة: Buffer.isEncoding(encoding)
أُضيفت في: v0.9.1
encoding<سلسلة نصية> اسم ترميز حروف للتحقق منه.- الإرجاع: <منطقي>
تُرجع true إذا كان encoding هو اسم ترميز حروف مدعوم، أو false بخلاف ذلك.
import { Buffer } from 'node:buffer';
console.log(Buffer.isEncoding('utf8'));
// يطبع: true
console.log(Buffer.isEncoding('hex'));
// يطبع: true
console.log(Buffer.isEncoding('utf/8'));
// يطبع: false
console.log(Buffer.isEncoding(''));
// يطبع: falseconst { Buffer } = require('node:buffer');
console.log(Buffer.isEncoding('utf8'));
// يطبع: true
console.log(Buffer.isEncoding('hex'));
// يطبع: true
console.log(Buffer.isEncoding('utf/8'));
// يطبع: false
console.log(Buffer.isEncoding(''));
// يطبع: falseخاصية الصنف: Buffer.poolSize
أُضيفت في: v0.11.3
- <عدد صحيح> افتراضي:
8192
هذا هو حجم (بالبايت) مثيلات Buffer الداخلية المُخصصة مسبقًا والمستخدمة للتجميع. يمكن تعديل هذه القيمة.
buf[index]
index<عدد صحيح>
يمكن استخدام عامل الفهرس [index] للحصول على وتعيين الثمانية الموجودة في الموضع index في buf. تشير القيم إلى بايتات فردية، لذا فإن النطاق القانوني للقيمة هو بين 0x00 و 0xFF (ست عشري) أو 0 و 255 (عشري).
هذا العامل موروث من Uint8Array، لذا فإن سلوكه في الوصول خارج النطاق هو نفسه سلوك Uint8Array. بمعنى آخر، تُرجع buf[index] قيمة undefined عندما تكون index سالبة أو أكبر من أو تساوي buf.length، ولا تعدل buf[index] = value المخزن المؤقت إذا كانت index سالبة أو \>= buf.length.
import { Buffer } from 'node:buffer';
// انسخ سلسلة ASCII إلى `Buffer` بايت واحد في كل مرة.
// (هذا يعمل فقط مع سلاسل ASCII فقط. بشكل عام، يجب على المرء استخدام
// `Buffer.from()` لإجراء هذا التحويل.)
const str = 'Node.js';
const buf = Buffer.allocUnsafe(str.length);
for (let i = 0; i < str.length; i++) {
buf[i] = str.charCodeAt(i);
}
console.log(buf.toString('utf8'));
// يطبع: Node.jsconst { Buffer } = require('node:buffer');
// انسخ سلسلة ASCII إلى `Buffer` بايت واحد في كل مرة.
// (هذا يعمل فقط مع سلاسل ASCII فقط. بشكل عام، يجب على المرء استخدام
// `Buffer.from()` لإجراء هذا التحويل.)
const str = 'Node.js';
const buf = Buffer.allocUnsafe(str.length);
for (let i = 0; i < str.length; i++) {
buf[i] = str.charCodeAt(i);
}
console.log(buf.toString('utf8'));
// يطبع: Node.jsbuf.buffer
- <ArrayBuffer> كائن
ArrayBufferالأساسي الذي تم إنشاء كائنBufferهذا استنادًا إليه.
لا يُضمن أن يتطابق ArrayBuffer هذا تمامًا مع Buffer الأصلي. راجع الملاحظات حول buf.byteOffset للحصول على التفاصيل.
import { Buffer } from 'node:buffer';
const arrayBuffer = new ArrayBuffer(16);
const buffer = Buffer.from(arrayBuffer);
console.log(buffer.buffer === arrayBuffer);
// Prints: trueconst { Buffer } = require('node:buffer');
const arrayBuffer = new ArrayBuffer(16);
const buffer = Buffer.from(arrayBuffer);
console.log(buffer.buffer === arrayBuffer);
// Prints: truebuf.byteOffset
- <integer>
byteOffsetلكائنArrayBufferالأساسي لـBuffer.
عند تعيين byteOffset في Buffer.from(ArrayBuffer, byteOffset, length)، أو أحيانًا عند تخصيص Buffer أصغر من Buffer.poolSize، لا يبدأ المخزن المؤقت من إزاحة صفرية في ArrayBuffer الأساسي.
قد يتسبب هذا في حدوث مشكلات عند الوصول إلى ArrayBuffer الأساسي مباشرةً باستخدام buf.buffer، حيث قد تكون أجزاء أخرى من ArrayBuffer غير مرتبطة بكائن Buffer نفسه.
تتمثل إحدى المشكلات الشائعة عند إنشاء كائن TypedArray يشارك ذاكرته مع Buffer في أنه في هذه الحالة يجب تحديد byteOffset بشكل صحيح:
import { Buffer } from 'node:buffer';
// Create a buffer smaller than `Buffer.poolSize`.
const nodeBuffer = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
// When casting the Node.js Buffer to an Int8Array, use the byteOffset
// to refer only to the part of `nodeBuffer.buffer` that contains the memory
// for `nodeBuffer`.
new Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);const { Buffer } = require('node:buffer');
// Create a buffer smaller than `Buffer.poolSize`.
const nodeBuffer = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
// When casting the Node.js Buffer to an Int8Array, use the byteOffset
// to refer only to the part of `nodeBuffer.buffer` that contains the memory
// for `nodeBuffer`.
new Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v8.0.0 | يمكن أن يكون المعامل target الآن Uint8Array. |
| v5.11.0 | يتم الآن دعم المعاملات الإضافية لتحديد الإزاحات. |
| v0.11.13 | تمت الإضافة في: v0.11.13 |
target<Buffer> | <Uint8Array> BufferأوUint8Arrayللمقارنة معbuf.targetStart<integer> الإزاحة داخلtargetالتي يجب أن تبدأ المقارنة عندها. افتراضي:0.targetEnd<integer> الإزاحة داخلtargetالتي يجب أن تنتهي المقارنة عندها (غير شاملة). افتراضي:target.length.sourceStart<integer> الإزاحة داخلbufالتي يجب أن تبدأ المقارنة عندها. افتراضي:0.sourceEnd<integer> الإزاحة داخلbufالتي يجب أن تنتهي المقارنة عندها (غير شاملة). افتراضي:buf.length.- الإرجاع: <integer>
يقارن buf مع target ويعيد رقمًا يشير إلى ما إذا كان buf يأتي قبل أو بعد أو هو نفسه target في ترتيب الفرز. تعتمد المقارنة على التسلسل الفعلي للبايتات في كل Buffer.
- يتم إرجاع
0إذا كانtargetهو نفسهbuf. - يتم إرجاع
1إذا كان يجب أن يأتيtargetقبلbufعند الفرز. - يتم إرجاع
-1إذا كان يجب أن يأتيtargetبعدbufعند الفرز.
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('BCD');
const buf3 = Buffer.from('ABCD');
console.log(buf1.compare(buf1));
// Prints: 0
console.log(buf1.compare(buf2));
// Prints: -1
console.log(buf1.compare(buf3));
// Prints: -1
console.log(buf2.compare(buf1));
// Prints: 1
console.log(buf2.compare(buf3));
// Prints: 1
console.log([buf1, buf2, buf3].sort(Buffer.compare));
// Prints: [ <Buffer 41 42 43>, <Buffer 41 42 43 44>, <Buffer 42 43 44> ]
// (This result is equal to: [buf1, buf3, buf2].)const { Buffer } = require('node:buffer');
const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('BCD');
const buf3 = Buffer.from('ABCD');
console.log(buf1.compare(buf1));
// Prints: 0
console.log(buf1.compare(buf2));
// Prints: -1
console.log(buf1.compare(buf3));
// Prints: -1
console.log(buf2.compare(buf1));
// Prints: 1
console.log(buf2.compare(buf3));
// Prints: 1
console.log([buf1, buf2, buf3].sort(Buffer.compare));
// Prints: [ <Buffer 41 42 43>, <Buffer 41 42 43 44>, <Buffer 42 43 44> ]
// (This result is equal to: [buf1, buf3, buf2].)يمكن استخدام المعاملات الاختيارية targetStart و targetEnd و sourceStart و sourceEnd لتقييد المقارنة بنطاقات محددة داخل target و buf على التوالي.
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]);
const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]);
console.log(buf1.compare(buf2, 5, 9, 0, 4));
// Prints: 0
console.log(buf1.compare(buf2, 0, 6, 4));
// Prints: -1
console.log(buf1.compare(buf2, 5, 6, 5));
// Prints: 1const { Buffer } = require('node:buffer');
const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]);
const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]);
console.log(buf1.compare(buf2, 5, 9, 0, 4));
// Prints: 0
console.log(buf1.compare(buf2, 0, 6, 4));
// Prints: -1
console.log(buf1.compare(buf2, 5, 6, 5));
// Prints: 1يتم طرح ERR_OUT_OF_RANGE إذا كان targetStart \< 0 أو sourceStart \< 0 أو targetEnd \> target.byteLength أو sourceEnd \> source.byteLength.
buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
أُضيف في: v0.1.90
target<Buffer> | <Uint8Array> BufferأوUint8Arrayلنسخ البيانات إليها.targetStart<integer> الإزاحة داخلtargetالتي سيتم بدء الكتابة منها. افتراضي: 0.sourceStart<integer> الإزاحة داخلbufالتي سيتم بدء النسخ منها. افتراضي: 0.sourceEnd<integer> الإزاحة داخلbufالتي سيتم إيقاف النسخ عندها (غير شاملة). افتراضي: buf.length.- الإرجاع: <integer> عدد البايتات التي تم نسخها.
ينسخ البيانات من منطقة في buf إلى منطقة في target، حتى إذا تداخلت منطقة الذاكرة target مع buf.
TypedArray.prototype.set() ينفذ نفس العملية، وهو متاح لجميع TypedArrays، بما في ذلك Buffers في Node.js، على الرغم من أنه يأخذ وسيطات دالة مختلفة.
import { Buffer } from 'node:buffer';
// Create two `Buffer` instances.
const buf1 = Buffer.allocUnsafe(26);
const buf2 = Buffer.allocUnsafe(26).fill('!');
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf1[i] = i + 97;
}
// Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`.
buf1.copy(buf2, 8, 16, 20);
// This is equivalent to:
// buf2.set(buf1.subarray(16, 20), 8);
console.log(buf2.toString('ascii', 0, 25));
// Prints: !!!!!!!!qrst!!!!!!!!!!!!!const { Buffer } = require('node:buffer');
// Create two `Buffer` instances.
const buf1 = Buffer.allocUnsafe(26);
const buf2 = Buffer.allocUnsafe(26).fill('!');
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf1[i] = i + 97;
}
// Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`.
buf1.copy(buf2, 8, 16, 20);
// This is equivalent to:
// buf2.set(buf1.subarray(16, 20), 8);
console.log(buf2.toString('ascii', 0, 25));
// Prints: !!!!!!!!qrst!!!!!!!!!!!!!import { Buffer } from 'node:buffer';
// Create a `Buffer` and copy data from one region to an overlapping region
// within the same `Buffer`.
const buf = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf[i] = i + 97;
}
buf.copy(buf, 0, 4, 10);
console.log(buf.toString());
// Prints: efghijghijklmnopqrstuvwxyzconst { Buffer } = require('node:buffer');
// Create a `Buffer` and copy data from one region to an overlapping region
// within the same `Buffer`.
const buf = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf[i] = i + 97;
}
buf.copy(buf, 0, 4, 10);
console.log(buf.toString());
// Prints: efghijghijklmnopqrstuvwxyzbuf.entries()
تمت الإضافة في: الإصدار v1.1.0
- الإرجاع: <Iterator>
يقوم بإنشاء وإرجاع مكرر لأزواج [index, byte] من محتويات buf.
import { Buffer } from 'node:buffer';
// تسجيل المحتويات الكاملة لـ `Buffer`.
const buf = Buffer.from('buffer');
for (const pair of buf.entries()) {
console.log(pair);
}
// طباعة:
// [0, 98]
// [1, 117]
// [2, 102]
// [3, 102]
// [4, 101]
// [5, 114]const { Buffer } = require('node:buffer');
// تسجيل المحتويات الكاملة لـ `Buffer`.
const buf = Buffer.from('buffer');
for (const pair of buf.entries()) {
console.log(pair);
}
// طباعة:
// [0, 98]
// [1, 117]
// [2, 102]
// [3, 102]
// [4, 101]
// [5, 114]buf.equals(otherBuffer)
[السجل]
| الإصدار | التغييرات |
|---|---|
| v8.0.0 | يمكن أن تكون الوسيطات الآن Uint8Arrays. |
| v0.11.13 | تمت الإضافة في: v0.11.13 |
-
otherBuffer<Buffer> | <Uint8Array> BufferأوUint8Arrayللمقارنة معbuf. - الإرجاع: <boolean>
يُرجع true إذا كان لكل من buf و otherBuffer نفس البايتات تمامًا، وإلا false. يكافئ buf.compare(otherBuffer) === 0.
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('414243', 'hex');
const buf3 = Buffer.from('ABCD');
console.log(buf1.equals(buf2));
// طباعة: true
console.log(buf1.equals(buf3));
// طباعة: falseconst { Buffer } = require('node:buffer');
const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('414243', 'hex');
const buf3 = Buffer.from('ABCD');
console.log(buf1.equals(buf2));
// طباعة: true
console.log(buf1.equals(buf3));
// طباعة: falsebuf.fill(value[, offset[, end]][, encoding])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v11.0.0 | يطرح ERR_OUT_OF_RANGE بدلاً من ERR_INDEX_OUT_OF_RANGE. |
| v10.0.0 | القيم السالبة لـ end تطرح خطأ ERR_INDEX_OUT_OF_RANGE. |
| v10.0.0 | محاولة ملء مخزن مؤقت غير صفري الطول بمخزن مؤقت صفري الطول يؤدي إلى طرح استثناء. |
| v10.0.0 | تحديد سلسلة غير صالحة لـ value يؤدي إلى طرح استثناء. |
| v5.7.0 | معلمة encoding مدعومة الآن. |
| v0.5.0 | تمت الإضافة في: v0.5.0 |
value<string> | <Buffer> | <Uint8Array> | <integer> القيمة التي سيتم ملءbufبها. القيمة الفارغة (سلسلة، Uint8Array، Buffer) يتم تحويلها قسراً إلى0.offset<integer> عدد البايتات التي سيتم تخطيها قبل البدء في ملءbuf. افتراضي:0.end<integer> مكان التوقف عن ملءbuf(غير شامل). افتراضي:buf.length.encoding<string> ترميزvalueإذا كانتvalueعبارة عن سلسلة. افتراضي:'utf8'.- إرجاع: <Buffer> مرجع إلى
buf.
يملأ buf بالقيمة value المحددة. إذا لم يتم إعطاء offset و end، فسيتم ملء buf بالكامل:
import { Buffer } from 'node:buffer';
// املأ `Buffer` بحرف ASCII 'h'.
const b = Buffer.allocUnsafe(50).fill('h');
console.log(b.toString());
// يطبع: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
// املأ مخزن مؤقت بسلسلة فارغة
const c = Buffer.allocUnsafe(5).fill('');
console.log(c.fill(''));
// يطبع: <Buffer 00 00 00 00 00>const { Buffer } = require('node:buffer');
// املأ `Buffer` بحرف ASCII 'h'.
const b = Buffer.allocUnsafe(50).fill('h');
console.log(b.toString());
// يطبع: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
// املأ مخزن مؤقت بسلسلة فارغة
const c = Buffer.allocUnsafe(5).fill('');
console.log(c.fill(''));
// يطبع: <Buffer 00 00 00 00 00>يتم تحويل value قسراً إلى قيمة uint32 إذا لم تكن سلسلة أو Buffer أو عددًا صحيحًا. إذا كان العدد الصحيح الناتج أكبر من 255 (عشري)، فسيتم ملء buf بـ value & 255.
إذا كانت الكتابة النهائية لعملية fill() تقع على حرف متعدد البايتات، فسيتم كتابة البايتات الخاصة بهذا الحرف فقط التي تتناسب مع buf:
import { Buffer } from 'node:buffer';
// املأ `Buffer` بحرف يستغرق بايتين في UTF-8.
console.log(Buffer.allocUnsafe(5).fill('\u0222'));
// يطبع: <Buffer c8 a2 c8 a2 c8>const { Buffer } = require('node:buffer');
// املأ `Buffer` بحرف يستغرق بايتين في UTF-8.
console.log(Buffer.allocUnsafe(5).fill('\u0222'));
// يطبع: <Buffer c8 a2 c8 a2 c8>إذا كانت value تحتوي على أحرف غير صالحة، فسيتم اقتطاعها؛ إذا لم تتبق أي بيانات ملء صالحة، فسيتم طرح استثناء:
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(5);
console.log(buf.fill('a'));
// يطبع: <Buffer 61 61 61 61 61>
console.log(buf.fill('aazz', 'hex'));
// يطبع: <Buffer aa aa aa aa aa>
console.log(buf.fill('zz', 'hex'));
// يطرح استثناء.const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(5);
console.log(buf.fill('a'));
// يطبع: <Buffer 61 61 61 61 61>
console.log(buf.fill('aazz', 'hex'));
// يطبع: <Buffer aa aa aa aa aa>
console.log(buf.fill('zz', 'hex'));
// يطرح استثناء.buf.includes(value[, byteOffset][, encoding])
تمت الإضافة في: v5.3.0
value<string> | <Buffer> | <Uint8Array> | <integer> ما الذي سيتم البحث عنه.byteOffset<integer> من أين يبدأ البحث فيbuf. إذا كانت القيمة سالبة، فسيتم حساب الإزاحة من نهايةbuf. الافتراضي:0.encoding<string> إذا كانتvalueسلسلة نصية، فهذا هو ترميزها. الافتراضي:'utf8'.- الإرجاع: <boolean>
trueإذا تم العثور علىvalueفيbuf، وfalseبخلاف ذلك.
معادل لـ buf.indexOf() !== -1.
import { Buffer } from 'node:buffer';
const buf = Buffer.from('this is a buffer');
console.log(buf.includes('this'));
// Prints: true
console.log(buf.includes('is'));
// Prints: true
console.log(buf.includes(Buffer.from('a buffer')));
// Prints: true
console.log(buf.includes(97));
// Prints: true (97 is the decimal ASCII value for 'a')
console.log(buf.includes(Buffer.from('a buffer example')));
// Prints: false
console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8)));
// Prints: true
console.log(buf.includes('this', 4));
// Prints: falseconst { Buffer } = require('node:buffer');
const buf = Buffer.from('this is a buffer');
console.log(buf.includes('this'));
// Prints: true
console.log(buf.includes('is'));
// Prints: true
console.log(buf.includes(Buffer.from('a buffer')));
// Prints: true
console.log(buf.includes(97));
// Prints: true (97 is the decimal ASCII value for 'a')
console.log(buf.includes(Buffer.from('a buffer example')));
// Prints: false
console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8)));
// Prints: true
console.log(buf.includes('this', 4));
// Prints: falsebuf.indexOf(value[, byteOffset][, encoding])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v8.0.0 | يمكن أن يكون value الآن Uint8Array. |
| v5.7.0, v4.4.0 | عند تمرير encoding، لم تعد معلمة byteOffset مطلوبة. |
| v1.5.0 | تمت الإضافة في: v1.5.0 |
value<string> | <Buffer> | <Uint8Array> | <integer> ما الذي تبحث عنه.byteOffset<integer> من أين تبدأ البحث فيbuf. إذا كانت سالبة، فسيتم حساب الإزاحة من نهايةbuf. افتراضي:0.encoding<string> إذا كانvalueسلسلة، فهذا هو الترميز المستخدم لتحديد التمثيل الثنائي للسلسلة التي سيتم البحث عنها فيbuf. افتراضي:'utf8'.- الإرجاع: <integer> فهرس أول ظهور لـ
valueفيbuf، أو-1إذا لم يحتوِbufعلىvalue.
إذا كان value:
- سلسلة، يتم تفسير
valueوفقًا لترميز الأحرف فيencoding. BufferأوUint8Array، سيتم استخدامvalueبالكامل. لمقارنةBufferجزئي، استخدمbuf.subarray.- رقم، سيتم تفسير
valueعلى أنه قيمة عدد صحيح غير موقعة 8 بت بين0و255.
import { Buffer } from 'node:buffer';
const buf = Buffer.from('this is a buffer');
console.log(buf.indexOf('this'));
// Prints: 0
console.log(buf.indexOf('is'));
// Prints: 2
console.log(buf.indexOf(Buffer.from('a buffer')));
// Prints: 8
console.log(buf.indexOf(97));
// Prints: 8 (97 is the decimal ASCII value for 'a')
console.log(buf.indexOf(Buffer.from('a buffer example')));
// Prints: -1
console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
// Prints: 8
const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
// Prints: 4
console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
// Prints: 6const { Buffer } = require('node:buffer');
const buf = Buffer.from('this is a buffer');
console.log(buf.indexOf('this'));
// Prints: 0
console.log(buf.indexOf('is'));
// Prints: 2
console.log(buf.indexOf(Buffer.from('a buffer')));
// Prints: 8
console.log(buf.indexOf(97));
// Prints: 8 (97 is the decimal ASCII value for 'a')
console.log(buf.indexOf(Buffer.from('a buffer example')));
// Prints: -1
console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
// Prints: 8
const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
// Prints: 4
console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
// Prints: 6إذا لم يكن value سلسلة أو رقمًا أو Buffer، فستطرح هذه الطريقة TypeError. إذا كان value رقمًا، فسيتم تحويله إلى قيمة بايت صالحة، وهي عدد صحيح بين 0 و 255.
إذا لم يكن byteOffset رقمًا، فسيتم تحويله إلى رقم. إذا كانت نتيجة التحويل هي NaN أو 0، فسيتم البحث في المخزن المؤقت بأكمله. يتطابق هذا السلوك مع String.prototype.indexOf().
import { Buffer } from 'node:buffer';
const b = Buffer.from('abcdef');
// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.indexOf(99.9));
console.log(b.indexOf(256 + 99));
// Passing a byteOffset that coerces to NaN or 0.
// Prints: 1, searching the whole buffer.
console.log(b.indexOf('b', undefined));
console.log(b.indexOf('b', {}));
console.log(b.indexOf('b', null));
console.log(b.indexOf('b', []));const { Buffer } = require('node:buffer');
const b = Buffer.from('abcdef');
// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.indexOf(99.9));
console.log(b.indexOf(256 + 99));
// Passing a byteOffset that coerces to NaN or 0.
// Prints: 1, searching the whole buffer.
console.log(b.indexOf('b', undefined));
console.log(b.indexOf('b', {}));
console.log(b.indexOf('b', null));
console.log(b.indexOf('b', []));إذا كان value سلسلة فارغة أو Buffer فارغ وكان byteOffset أقل من buf.length، فسيتم إرجاع byteOffset. إذا كان value فارغًا وكان byteOffset على الأقل buf.length، فسيتم إرجاع buf.length.
buf.keys()
أُضيف في: v1.1.0
- إرجاع: <Iterator>
إنشاء وإرجاع مُكرِّر لمفاتيح (فهارس) buf.
import { Buffer } from 'node:buffer';
const buf = Buffer.from('buffer');
for (const key of buf.keys()) {
console.log(key);
}
// Prints:
// 0
// 1
// 2
// 3
// 4
// 5const { Buffer } = require('node:buffer');
const buf = Buffer.from('buffer');
for (const key of buf.keys()) {
console.log(key);
}
// Prints:
// 0
// 1
// 2
// 3
// 4
// 5buf.lastIndexOf(value[, byteOffset][, encoding])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v8.0.0 | يمكن أن يكون value الآن Uint8Array. |
| v6.0.0 | أُضيف في: v6.0.0 |
value<string> | <Buffer> | <Uint8Array> | <integer> ما الذي سيتم البحث عنه.byteOffset<integer> من أين تبدأ البحث فيbuf. إذا كان سالبًا، فسيتم حساب الإزاحة من نهايةbuf. الافتراضي:buf.length - 1.encoding<string> إذا كانvalueسلسلة نصية، فهذا هو الترميز المستخدم لتحديد التمثيل الثنائي للسلسلة النصية التي سيتم البحث عنها فيbuf. الافتراضي:'utf8'.- إرجاع: <integer> فهرس آخر ظهور لـ
valueفيbuf، أو-1إذا لم يحتويbufعلىvalue.
مطابق لـ buf.indexOf()، باستثناء أنه يتم العثور على آخر ظهور لـ value بدلاً من أول ظهور.
import { Buffer } from 'node:buffer';
const buf = Buffer.from('this buffer is a buffer');
console.log(buf.lastIndexOf('this'));
// Prints: 0
console.log(buf.lastIndexOf('buffer'));
// Prints: 17
console.log(buf.lastIndexOf(Buffer.from('buffer')));
// Prints: 17
console.log(buf.lastIndexOf(97));
// Prints: 15 (97 is the decimal ASCII value for 'a')
console.log(buf.lastIndexOf(Buffer.from('yolo')));
// Prints: -1
console.log(buf.lastIndexOf('buffer', 5));
// Prints: 5
console.log(buf.lastIndexOf('buffer', 4));
// Prints: -1
const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le'));
// Prints: 6
console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le'));
// Prints: 4const { Buffer } = require('node:buffer');
const buf = Buffer.from('this buffer is a buffer');
console.log(buf.lastIndexOf('this'));
// Prints: 0
console.log(buf.lastIndexOf('buffer'));
// Prints: 17
console.log(buf.lastIndexOf(Buffer.from('buffer')));
// Prints: 17
console.log(buf.lastIndexOf(97));
// Prints: 15 (97 is the decimal ASCII value for 'a')
console.log(buf.lastIndexOf(Buffer.from('yolo')));
// Prints: -1
console.log(buf.lastIndexOf('buffer', 5));
// Prints: 5
console.log(buf.lastIndexOf('buffer', 4));
// Prints: -1
const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le'));
// Prints: 6
console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le'));
// Prints: 4إذا لم يكن value سلسلة نصية أو رقمًا أو Buffer، فسوف تطرح هذه الطريقة TypeError. إذا كان value رقمًا، فسيتم إجباره على قيمة بايت صالحة، وهي عدد صحيح بين 0 و 255.
إذا لم يكن byteOffset رقمًا، فسيتم إجباره على رقم. أي وسيطات يتم إجبارها على NaN، مثل {} أو undefined، ستبحث في المخزن المؤقت بأكمله. يتطابق هذا السلوك مع String.prototype.lastIndexOf().
import { Buffer } from 'node:buffer';
const b = Buffer.from('abcdef');
// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.lastIndexOf(99.9));
console.log(b.lastIndexOf(256 + 99));
// Passing a byteOffset that coerces to NaN.
// Prints: 1, searching the whole buffer.
console.log(b.lastIndexOf('b', undefined));
console.log(b.lastIndexOf('b', {}));
// Passing a byteOffset that coerces to 0.
// Prints: -1, equivalent to passing 0.
console.log(b.lastIndexOf('b', null));
console.log(b.lastIndexOf('b', []));const { Buffer } = require('node:buffer');
const b = Buffer.from('abcdef');
// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.lastIndexOf(99.9));
console.log(b.lastIndexOf(256 + 99));
// Passing a byteOffset that coerces to NaN.
// Prints: 1, searching the whole buffer.
console.log(b.lastIndexOf('b', undefined));
console.log(b.lastIndexOf('b', {}));
// Passing a byteOffset that coerces to 0.
// Prints: -1, equivalent to passing 0.
console.log(b.lastIndexOf('b', null));
console.log(b.lastIndexOf('b', []));إذا كانت value سلسلة نصية فارغة أو Buffer فارغ، فسيتم إرجاع byteOffset.
buf.length
تمت الإضافة في: v0.1.90
إرجاع عدد البايتات في buf.
import { Buffer } from 'node:buffer';
// إنشاء `Buffer` وكتابة سلسلة نصية أقصر إليها باستخدام UTF-8.
const buf = Buffer.alloc(1234);
console.log(buf.length);
// يطبع: 1234
buf.write('some string', 0, 'utf8');
console.log(buf.length);
// يطبع: 1234const { Buffer } = require('node:buffer');
// إنشاء `Buffer` وكتابة سلسلة نصية أقصر إليها باستخدام UTF-8.
const buf = Buffer.alloc(1234);
console.log(buf.length);
// يطبع: 1234
buf.write('some string', 0, 'utf8');
console.log(buf.length);
// يطبع: 1234buf.parent
تم الإلغاء منذ: v8.0.0
[مستقر: 0 - تم الإلغاء]
مستقر: 0 الاستقرار: 0 - تم الإلغاء: استخدم buf.buffer بدلاً من ذلك.
خاصية buf.parent هي اسم مستعار مهجور لـ buf.buffer.
buf.readBigInt64BE([offset])
تمت الإضافة في: v12.0.0, v10.20.0
offset<integer> عدد البايتات المراد تخطيها قبل البدء في القراءة. يجب أن تحقق:0 \<= offset \<= buf.length - 8. افتراضي:0.- الإرجاع: <bigint>
يقرأ عددًا صحيحًا 64 بت موقعًا بتنسيق big-endian من buf عند offset المحدد.
تُفسَّر الأعداد الصحيحة المقروءة من Buffer على أنها قيم موقعة بمكملات العدد اثنين.
buf.readBigInt64LE([offset])
تمت الإضافة في: v12.0.0, v10.20.0
offset<integer> عدد البايتات المراد تخطيها قبل البدء في القراءة. يجب أن تحقق:0 \<= offset \<= buf.length - 8. افتراضي:0.- الإرجاع: <bigint>
يقرأ عددًا صحيحًا 64 بت موقعًا بتنسيق little-endian من buf عند offset المحدد.
تُفسَّر الأعداد الصحيحة المقروءة من Buffer على أنها قيم موقعة بمكملات العدد اثنين.
buf.readBigUInt64BE([offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v14.10.0, v12.19.0 | هذه الدالة متاحة أيضًا باسم buf.readBigUint64BE(). |
| v12.0.0, v10.20.0 | تمت إضافتها في: v12.0.0, v10.20.0 |
offset<integer> عدد البايتات المراد تخطيها قبل البدء في القراءة. يجب أن تحقق الشرط:0 \<= offset \<= buf.length - 8. الافتراضي:0.- Returns: <bigint>
يقرأ عددًا صحيحًا غير موقع بحجم 64 بت بترتيب النهاية الكبيرة (big-endian) من buf عند offset المحدد.
هذه الدالة متاحة أيضًا تحت الاسم المستعار readBigUint64BE.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
console.log(buf.readBigUInt64BE(0));
// Prints: 4294967295nconst { Buffer } = require('node:buffer');
const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
console.log(buf.readBigUInt64BE(0));
// Prints: 4294967295nbuf.readBigUInt64LE([offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v14.10.0, v12.19.0 | هذه الدالة متاحة أيضًا باسم buf.readBigUint64LE(). |
| v12.0.0, v10.20.0 | تمت إضافتها في: v12.0.0, v10.20.0 |
offset<integer> عدد البايتات المراد تخطيها قبل البدء في القراءة. يجب أن تحقق الشرط:0 \<= offset \<= buf.length - 8. الافتراضي:0.- Returns: <bigint>
يقرأ عددًا صحيحًا غير موقع بحجم 64 بت بترتيب النهاية الصغيرة (little-endian) من buf عند offset المحدد.
هذه الدالة متاحة أيضًا تحت الاسم المستعار readBigUint64LE.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
console.log(buf.readBigUInt64LE(0));
// Prints: 18446744069414584320nconst { Buffer } = require('node:buffer');
const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
console.log(buf.readBigUInt64LE(0));
// Prints: 18446744069414584320nbuf.readDoubleBE([offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.11.15 | تمت الإضافة في: v0.11.15 |
offset<integer> عدد البايتات المراد تخطيها قبل البدء في القراءة. يجب أن تحقق الشرط0 \<= offset \<= buf.length - 8. الافتراضي:0.- الإرجاع: <number>
يقرأ عددًا عشريًا مزدوج الدقة (64 بت) بترتيب النهاية الكبيرة (big-endian) من buf عند offset المحدد.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
console.log(buf.readDoubleBE(0));
// Prints: 8.20788039913184e-304const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
console.log(buf.readDoubleBE(0));
// Prints: 8.20788039913184e-304buf.readDoubleLE([offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.11.15 | تمت الإضافة في: v0.11.15 |
offset<integer> عدد البايتات المراد تخطيها قبل البدء في القراءة. يجب أن تحقق الشرط0 \<= offset \<= buf.length - 8. الافتراضي:0.- الإرجاع: <number>
يقرأ عددًا عشريًا مزدوج الدقة (64 بت) بترتيب النهاية الصغيرة (little-endian) من buf عند offset المحدد.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
console.log(buf.readDoubleLE(0));
// Prints: 5.447603722011605e-270
console.log(buf.readDoubleLE(1));
// Throws ERR_OUT_OF_RANGE.const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
console.log(buf.readDoubleLE(0));
// Prints: 5.447603722011605e-270
console.log(buf.readDoubleLE(1));
// Throws ERR_OUT_OF_RANGE.buf.readFloatBE([offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك قسر ضمني للإزاحة إلى uint32. |
| v0.11.15 | تمت إضافته في: v0.11.15 |
offset<integer> عدد البايتات التي سيتم تخطيها قبل البدء في القراءة. يجب أن يستوفي الشرط0 \<= offset \<= buf.length - 4. الافتراضي:0.- الإرجاع: <number>
يقرأ قيمة فاصلة عائمة (float) ذات 32 بت بنظام النهاية الكبيرة (big-endian) من buf عند offset المحدد.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3, 4]);
console.log(buf.readFloatBE(0));
// يطبع: 2.387939260590663e-38const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3, 4]);
console.log(buf.readFloatBE(0));
// يطبع: 2.387939260590663e-38buf.readFloatLE([offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك قسر ضمني للإزاحة إلى uint32. |
| v0.11.15 | تمت إضافته في: v0.11.15 |
offset<integer> عدد البايتات التي سيتم تخطيها قبل البدء في القراءة. يجب أن يستوفي الشرط0 \<= offset \<= buf.length - 4. الافتراضي:0.- الإرجاع: <number>
يقرأ قيمة فاصلة عائمة (float) ذات 32 بت بنظام النهاية الصغيرة (little-endian) من buf عند offset المحدد.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3, 4]);
console.log(buf.readFloatLE(0));
// يطبع: 1.539989614439558e-36
console.log(buf.readFloatLE(1));
// يطرح ERR_OUT_OF_RANGE.const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3, 4]);
console.log(buf.readFloatLE(0));
// يطبع: 1.539989614439558e-36
console.log(buf.readFloatLE(1));
// يطرح ERR_OUT_OF_RANGE.buf.readInt8([offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.5.0 | تمت الإضافة في: v0.5.0 |
offset<integer> عدد البايتات المراد تخطيها قبل بدء القراءة. يجب أن تستوفي الشرط0 \<= offset \<= buf.length - 1. افتراضي:0.- Returns: <integer>
يقرأ عددًا صحيحًا موقعًا 8 بت من buf عند offset المحدد.
تُفسَّر الأعداد الصحيحة المقروءة من Buffer كقيم موقعة بنظام المتمم الثنائي.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([-1, 5]);
console.log(buf.readInt8(0));
// Prints: -1
console.log(buf.readInt8(1));
// Prints: 5
console.log(buf.readInt8(2));
// Throws ERR_OUT_OF_RANGE.const { Buffer } = require('node:buffer');
const buf = Buffer.from([-1, 5]);
console.log(buf.readInt8(0));
// Prints: -1
console.log(buf.readInt8(1));
// Prints: 5
console.log(buf.readInt8(2));
// Throws ERR_OUT_OF_RANGE.buf.readInt16BE([offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
offset<integer> عدد البايتات المراد تخطيها قبل بدء القراءة. يجب أن تستوفي الشرط0 \<= offset \<= buf.length - 2. افتراضي:0.- Returns: <integer>
يقرأ عددًا صحيحًا موقعًا 16 بت بنظام النهاية الكبيرة (big-endian) من buf عند offset المحدد.
تُفسَّر الأعداد الصحيحة المقروءة من Buffer كقيم موقعة بنظام المتمم الثنائي.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0, 5]);
console.log(buf.readInt16BE(0));
// Prints: 5const { Buffer } = require('node:buffer');
const buf = Buffer.from([0, 5]);
console.log(buf.readInt16BE(0));
// Prints: 5buf.readInt16LE([offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولا يوجد بعد الآن إجبار ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
offset<integer> عدد البايتات التي سيتم تخطيها قبل البدء في القراءة. يجب أن تحقق0 \<= offset \<= buf.length - 2. الافتراضي:0.- إرجاع: <integer>
يقرأ عددًا صحيحًا موقعًا صغير النهاية 16 بت من buf عند offset المحدد.
تُفسر الأعداد الصحيحة المقروءة من Buffer على أنها قيم موقعة مكملة للاثنين.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0, 5]);
console.log(buf.readInt16LE(0));
// طباعة: 1280
console.log(buf.readInt16LE(1));
// يطرح ERR_OUT_OF_RANGE.const { Buffer } = require('node:buffer');
const buf = Buffer.from([0, 5]);
console.log(buf.readInt16LE(0));
// طباعة: 1280
console.log(buf.readInt16LE(1));
// يطرح ERR_OUT_OF_RANGE.buf.readInt32BE([offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولا يوجد بعد الآن إجبار ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
offset<integer> عدد البايتات التي سيتم تخطيها قبل البدء في القراءة. يجب أن تحقق0 \<= offset \<= buf.length - 4. الافتراضي:0.- إرجاع: <integer>
يقرأ عددًا صحيحًا موقعًا كبير النهاية 32 بت من buf عند offset المحدد.
تُفسر الأعداد الصحيحة المقروءة من Buffer على أنها قيم موقعة مكملة للاثنين.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0, 0, 0, 5]);
console.log(buf.readInt32BE(0));
// طباعة: 5const { Buffer } = require('node:buffer');
const buf = Buffer.from([0, 0, 0, 5]);
console.log(buf.readInt32BE(0));
// طباعة: 5buf.readInt32LE([offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك قسر ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
offset<integer> عدد البايتات المراد تخطيها قبل بدء القراءة. يجب أن تحقق0 \<= offset \<= buf.length - 4. الافتراضي:0.- الإرجاع: <integer>
يقرأ عددًا صحيحًا موقعًا بحجم 32 بت بنظام little-endian من buf عند offset المحدد.
تُفسَّر الأعداد الصحيحة المقروءة من Buffer على أنها قيم موقعة بنظام المتمم الثنائي.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0, 0, 0, 5]);
console.log(buf.readInt32LE(0));
// يطبع: 83886080
console.log(buf.readInt32LE(1));
// يطرح ERR_OUT_OF_RANGE.const { Buffer } = require('node:buffer');
const buf = Buffer.from([0, 0, 0, 5]);
console.log(buf.readInt32LE(0));
// يطبع: 83886080
console.log(buf.readInt32LE(1));
// يطرح ERR_OUT_OF_RANGE.buf.readIntBE(offset, byteLength)
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك قسر ضمني للإزاحة و byteLength إلى uint32. |
| v0.11.15 | تمت الإضافة في: v0.11.15 |
offset<integer> عدد البايتات المراد تخطيها قبل بدء القراءة. يجب أن تحقق0 \<= offset \<= buf.length - byteLength.byteLength<integer> عدد البايتات المراد قراءتها. يجب أن تحقق0 \< byteLength \<= 6.- الإرجاع: <integer>
يقرأ عدد byteLength من البايتات من buf عند offset المحدد ويفسر النتيجة على أنها قيمة موقعة بنظام big-endian، ونظام المتمم الثنائي يدعم ما يصل إلى 48 بت من الدقة.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readIntBE(0, 6).toString(16));
// يطبع: 1234567890ab
console.log(buf.readIntBE(1, 6).toString(16));
// يطرح ERR_OUT_OF_RANGE.
console.log(buf.readIntBE(1, 0).toString(16));
// يطرح ERR_OUT_OF_RANGE.const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readIntBE(0, 6).toString(16));
// يطبع: 1234567890ab
console.log(buf.readIntBE(1, 6).toString(16));
// يطرح ERR_OUT_OF_RANGE.
console.log(buf.readIntBE(1, 0).toString(16));
// يطرح ERR_OUT_OF_RANGE.buf.readIntLE(offset, byteLength)
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة و byteLength إلى uint32. |
| v0.11.15 | أُضيف في: v0.11.15 |
offset<integer>: عدد البايتات التي يجب تخطيها قبل البدء في القراءة. يجب أن تحقق0 \<= offset \<= buf.length - byteLength.byteLength<integer>: عدد البايتات المراد قراءتها. يجب أن تحقق0 \< byteLength \<= 6.- الإرجاع: <integer>
يقرأ عدد byteLength من البايتات من buf في offset المحدد ويفسر النتيجة كقيمة موقعة بترميز المكمل الثنائي ذات ترتيب البايتات الأصغر (little-endian) تدعم ما يصل إلى 48 بت من الدقة.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readIntLE(0, 6).toString(16));
// يطبع: -546f87a9cbeeconst { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readIntLE(0, 6).toString(16));
// يطبع: -546f87a9cbeebuf.readUInt8([offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الدالة متاحة أيضًا باسم buf.readUint8(). |
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.5.0 | أُضيف في: v0.5.0 |
offset<integer>: عدد البايتات التي يجب تخطيها قبل البدء في القراءة. يجب أن تحقق0 \<= offset \<= buf.length - 1. الافتراضي:0.- الإرجاع: <integer>
يقرأ عددًا صحيحًا غير موقع 8 بت من buf في offset المحدد.
هذه الدالة متاحة أيضًا تحت الاسم المستعار readUint8.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, -2]);
console.log(buf.readUInt8(0));
// يطبع: 1
console.log(buf.readUInt8(1));
// يطبع: 254
console.log(buf.readUInt8(2));
// يطلق ERR_OUT_OF_RANGE.const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, -2]);
console.log(buf.readUInt8(0));
// يطبع: 1
console.log(buf.readUInt8(1));
// يطبع: 254
console.log(buf.readUInt8(2));
// يطلق ERR_OUT_OF_RANGE.buf.readUInt16BE([offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الوظيفة متاحة أيضًا باسم buf.readUint16BE(). |
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك قسر ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت إضافتها في: v0.5.5 |
offset<integer> عدد البايتات المراد تخطيها قبل البدء في القراءة. يجب أن يستوفي الشرط0 \<= offset \<= buf.length - 2. الافتراضي:0.- Returns: <integer>
يقرأ عددًا صحيحًا غير موقَّع 16 بتًا بنظام النهاية الكبيرة من buf عند offset المحدد.
هذه الوظيفة متاحة أيضًا تحت الاسم المستعار readUint16BE.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56]);
console.log(buf.readUInt16BE(0).toString(16));
// يطبع: 1234
console.log(buf.readUInt16BE(1).toString(16));
// يطبع: 3456const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56]);
console.log(buf.readUInt16BE(0).toString(16));
// يطبع: 1234
console.log(buf.readUInt16BE(1).toString(16));
// يطبع: 3456buf.readUInt16LE([offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الوظيفة متاحة أيضًا باسم buf.readUint16LE(). |
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك قسر ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت إضافتها في: v0.5.5 |
offset<integer> عدد البايتات المراد تخطيها قبل البدء في القراءة. يجب أن يستوفي الشرط0 \<= offset \<= buf.length - 2. الافتراضي:0.- Returns: <integer>
يقرأ عددًا صحيحًا غير موقَّع 16 بتًا بنظام النهاية الصغيرة من buf عند offset المحدد.
هذه الوظيفة متاحة أيضًا تحت الاسم المستعار readUint16LE.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56]);
console.log(buf.readUInt16LE(0).toString(16));
// يطبع: 3412
console.log(buf.readUInt16LE(1).toString(16));
// يطبع: 5634
console.log(buf.readUInt16LE(2).toString(16));
// يطرح ERR_OUT_OF_RANGE.const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56]);
console.log(buf.readUInt16LE(0).toString(16));
// يطبع: 3412
console.log(buf.readUInt16LE(1).toString(16));
// يطبع: 5634
console.log(buf.readUInt16LE(2).toString(16));
// يطرح ERR_OUT_OF_RANGE.buf.readUInt32BE([offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الدالة متاحة أيضًا كـ buf.readUint32BE(). |
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك قسر ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
offset<integer> عدد البايتات التي سيتم تخطيها قبل بدء القراءة. يجب أن يفي بالشرط0 \<= offset \<= buf.length - 4. الافتراضي:0.- Returns: <integer>
يقرأ عددًا صحيحًا غير موقع 32 بت بترتيب النهاية الكبيرة من buf عند offset المحدد.
هذه الدالة متاحة أيضًا تحت الاسم المستعار readUint32BE.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
console.log(buf.readUInt32BE(0).toString(16));
// يطبع: 12345678const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
console.log(buf.readUInt32BE(0).toString(16));
// يطبع: 12345678buf.readUInt32LE([offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الدالة متاحة أيضًا كـ buf.readUint32LE(). |
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك قسر ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
offset<integer> عدد البايتات التي سيتم تخطيها قبل بدء القراءة. يجب أن يفي بالشرط0 \<= offset \<= buf.length - 4. الافتراضي:0.- Returns: <integer>
يقرأ عددًا صحيحًا غير موقع 32 بت بترتيب النهاية الصغيرة من buf عند offset المحدد.
هذه الدالة متاحة أيضًا تحت الاسم المستعار readUint32LE.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
console.log(buf.readUInt32LE(0).toString(16));
// يطبع: 78563412
console.log(buf.readUInt32LE(1).toString(16));
// يطرح ERR_OUT_OF_RANGE.const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
console.log(buf.readUInt32LE(0).toString(16));
// يطبع: 78563412
console.log(buf.readUInt32LE(1).toString(16));
// يطرح ERR_OUT_OF_RANGE.buf.readUIntBE(offset, byteLength)
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الدالة متاحة أيضًا باسم buf.readUintBE(). |
| v10.0.0 | تمت إزالة noAssert وعدم الإكراه الضمني للإزاحة و byteLength إلى uint32 بعد الآن. |
| v0.11.15 | تمت إضافتها في: v0.11.15 |
offset<عدد صحيح> عدد البايتات التي يجب تخطيها قبل البدء في القراءة. يجب أن تفي بالشرط0 \<= offset \<= buf.length - byteLength.byteLength<عدد صحيح> عدد البايتات المراد قراءتها. يجب أن تفي بالشرط0 \< byteLength \<= 6.- الإرجاع: <عدد صحيح>
يقرأ عدد byteLength من البايتات من buf عند offset المحدد ويفسر النتيجة كعدد صحيح كبير النهاية غير موقع يدعم ما يصل إلى 48 بت من الدقة.
هذه الدالة متاحة أيضًا تحت الاسم المستعار readUintBE.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readUIntBE(0, 6).toString(16));
// يطبع: 1234567890ab
console.log(buf.readUIntBE(1, 6).toString(16));
// يلقي ERR_OUT_OF_RANGE.const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readUIntBE(0, 6).toString(16));
// يطبع: 1234567890ab
console.log(buf.readUIntBE(1, 6).toString(16));
// يلقي ERR_OUT_OF_RANGE.buf.readUIntLE(offset, byteLength)
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الدالة متاحة أيضًا باسم buf.readUintLE(). |
| v10.0.0 | تمت إزالة noAssert وعدم الإكراه الضمني للإزاحة و byteLength إلى uint32 بعد الآن. |
| v0.11.15 | تمت إضافتها في: v0.11.15 |
offset<عدد صحيح> عدد البايتات التي يجب تخطيها قبل البدء في القراءة. يجب أن تفي بالشرط0 \<= offset \<= buf.length - byteLength.byteLength<عدد صحيح> عدد البايتات المراد قراءتها. يجب أن تفي بالشرط0 \< byteLength \<= 6.- الإرجاع: <عدد صحيح>
يقرأ عدد byteLength من البايتات من buf عند offset المحدد ويفسر النتيجة كعدد صحيح صغير النهاية غير موقع يدعم ما يصل إلى 48 بت من الدقة.
هذه الدالة متاحة أيضًا تحت الاسم المستعار readUintLE.
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readUIntLE(0, 6).toString(16));
// يطبع: ab9078563412const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readUIntLE(0, 6).toString(16));
// يطبع: ab9078563412buf.subarray([start[, end]])
تمت الإضافة في: v3.0.0
start<integer> المكان الذي سيبدأ فيهBufferالجديد. افتراضي:0.end<integer> المكان الذي سينتهي فيهBufferالجديد (غير شامل). افتراضي:buf.length.- إرجاع: <Buffer>
إرجاع Buffer جديد يشير إلى نفس الذاكرة مثل الأصل، ولكن مع إزاحة واقتطاع بواسطة فهرسي start و end.
يؤدي تحديد end أكبر من buf.length إلى إرجاع نفس نتيجة end مساوية لـ buf.length.
هذه الطريقة موروثة من TypedArray.prototype.subarray().
سيؤدي تعديل شريحة Buffer الجديدة إلى تعديل الذاكرة في Buffer الأصلي لأن الذاكرة المخصصة للكائنين متداخلة.
import { Buffer } from 'node:buffer';
// إنشاء `Buffer` باستخدام الأبجدية ASCII، وأخذ شريحة، وتعديل بايت واحد
// من `Buffer` الأصلي.
const buf1 = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 هي القيمة العشرية ASCII للحرف 'a'.
buf1[i] = i + 97;
}
const buf2 = buf1.subarray(0, 3);
console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: abc
buf1[0] = 33;
console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: !bcconst { Buffer } = require('node:buffer');
// إنشاء `Buffer` باستخدام الأبجدية ASCII، وأخذ شريحة، وتعديل بايت واحد
// من `Buffer` الأصلي.
const buf1 = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 هي القيمة العشرية ASCII للحرف 'a'.
buf1[i] = i + 97;
}
const buf2 = buf1.subarray(0, 3);
console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: abc
buf1[0] = 33;
console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: !bcيؤدي تحديد الفهارس السالبة إلى إنشاء الشريحة بالنسبة إلى نهاية buf بدلاً من البداية.
import { Buffer } from 'node:buffer';
const buf = Buffer.from('buffer');
console.log(buf.subarray(-6, -1).toString());
// Prints: buffe
// (Equivalent to buf.subarray(0, 5).)
console.log(buf.subarray(-6, -2).toString());
// Prints: buff
// (Equivalent to buf.subarray(0, 4).)
console.log(buf.subarray(-5, -2).toString());
// Prints: uff
// (Equivalent to buf.subarray(1, 4).)const { Buffer } = require('node:buffer');
const buf = Buffer.from('buffer');
console.log(buf.subarray(-6, -1).toString());
// Prints: buffe
// (Equivalent to buf.subarray(0, 5).)
console.log(buf.subarray(-6, -2).toString());
// Prints: buff
// (Equivalent to buf.subarray(0, 4).)
console.log(buf.subarray(-5, -2).toString());
// Prints: uff
// (Equivalent to buf.subarray(1, 4).)buf.slice([start[, end]])
[التاريخ]
| الإصدار | التغييرات |
|---|---|
| الإصدار v17.5.0، v16.15.0 | تم إهمال الأسلوب buf.slice(). |
| الإصدار v7.0.0 | يتم الآن إجبار جميع الإزاحات إلى أعداد صحيحة قبل إجراء أي حسابات عليها. |
| الإصدار v7.1.0، v6.9.2 | معالجة إجبار الإزاحات إلى أعداد صحيحة الآن قيم خارج نطاق العدد الصحيح 32 بت بشكل صحيح. |
| الإصدار v0.3.0 | تمت إضافته في: v0.3.0 |
start<integer> حيث سيبدأBufferالجديد. افتراضي:0.end<integer> حيث سينتهيBufferالجديد (غير شامل). افتراضي:buf.length.- إرجاع: <Buffer>
[مستقر: 0 - مُهمل]
مستقر: 0 الاستقرار: 0 - مُهمل: استخدم buf.subarray بدلاً من ذلك.
يُرجع Buffer جديدًا يشير إلى نفس الذاكرة الأصلية، ولكنه مُزاح ومُقتطع بفهرسي start و end.
هذا الأسلوب غير متوافق مع Uint8Array.prototype.slice()، وهو فئة عليا لـ Buffer. لنسخ الشريحة، استخدم Uint8Array.prototype.slice().
import { Buffer } from 'node:buffer';
const buf = Buffer.from('buffer');
const copiedBuf = Uint8Array.prototype.slice.call(buf);
copiedBuf[0]++;
console.log(copiedBuf.toString());
// Prints: cuffer
console.log(buf.toString());
// Prints: buffer
// With buf.slice(), the original buffer is modified.
const notReallyCopiedBuf = buf.slice();
notReallyCopiedBuf[0]++;
console.log(notReallyCopiedBuf.toString());
// Prints: cuffer
console.log(buf.toString());
// Also prints: cuffer (!)const { Buffer } = require('node:buffer');
const buf = Buffer.from('buffer');
const copiedBuf = Uint8Array.prototype.slice.call(buf);
copiedBuf[0]++;
console.log(copiedBuf.toString());
// Prints: cuffer
console.log(buf.toString());
// Prints: buffer
// With buf.slice(), the original buffer is modified.
const notReallyCopiedBuf = buf.slice();
notReallyCopiedBuf[0]++;
console.log(notReallyCopiedBuf.toString());
// Prints: cuffer
console.log(buf.toString());
// Also prints: cuffer (!)buf.swap16()
أضيف في: v5.10.0
- الإرجاع: <Buffer> إشارة إلى
buf.
يفسر buf على أنه مصفوفة من الأعداد الصحيحة غير الموقعة ذات 16 بت ويتبادل ترتيب البايتات في المكان. يطرح ERR_INVALID_BUFFER_SIZE إذا لم يكن buf.length مضاعفًا للرقم 2.
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap16();
console.log(buf1);
// Prints: <Buffer 02 01 04 03 06 05 08 07>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap16();
// Throws ERR_INVALID_BUFFER_SIZE.const { Buffer } = require('node:buffer');
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap16();
console.log(buf1);
// Prints: <Buffer 02 01 04 03 06 05 08 07>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap16();
// Throws ERR_INVALID_BUFFER_SIZE.أحد الاستخدامات المريحة لـ buf.swap16() هو إجراء تحويل سريع في المكان بين UTF-16 little-endian و UTF-16 big-endian:
import { Buffer } from 'node:buffer';
const buf = Buffer.from('This is little-endian UTF-16', 'utf16le');
buf.swap16(); // Convert to big-endian UTF-16 text.const { Buffer } = require('node:buffer');
const buf = Buffer.from('This is little-endian UTF-16', 'utf16le');
buf.swap16(); // Convert to big-endian UTF-16 text.buf.swap32()
أضيف في: v5.10.0
- الإرجاع: <Buffer> إشارة إلى
buf.
يفسر buf على أنه مصفوفة من الأعداد الصحيحة غير الموقعة ذات 32 بت ويتبادل ترتيب البايتات في المكان. يطرح ERR_INVALID_BUFFER_SIZE إذا لم يكن buf.length مضاعفًا للرقم 4.
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap32();
console.log(buf1);
// Prints: <Buffer 04 03 02 01 08 07 06 05>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap32();
// Throws ERR_INVALID_BUFFER_SIZE.const { Buffer } = require('node:buffer');
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap32();
console.log(buf1);
// Prints: <Buffer 04 03 02 01 08 07 06 05>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap32();
// Throws ERR_INVALID_BUFFER_SIZE.buf.swap64()
أضيف في: v6.3.0
- الإرجاع: <Buffer> مرجع إلى
buf.
يفسر buf على أنه مجموعة من الأرقام ذات 64 بت ويقوم بتبديل ترتيب البايت في المكان. يطرح ERR_INVALID_BUFFER_SIZE إذا لم يكن buf.length من مضاعفات 8.
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap64();
console.log(buf1);
// Prints: <Buffer 08 07 06 05 04 03 02 01>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap64();
// Throws ERR_INVALID_BUFFER_SIZE.const { Buffer } = require('node:buffer');
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap64();
console.log(buf1);
// Prints: <Buffer 08 07 06 05 04 03 02 01>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap64();
// Throws ERR_INVALID_BUFFER_SIZE.buf.toJSON()
أضيف في: v0.9.2
- الإرجاع: <Object>
إرجاع تمثيل JSON لـ buf. JSON.stringify() يستدعي هذا الأمر ضمنيًا عند تحويل مثيل Buffer إلى سلسلة نصية.
يقبل Buffer.from() الكائنات بالصيغة المرجعة من هذه الطريقة. على وجه الخصوص، يعمل Buffer.from(buf.toJSON()) مثل Buffer.from(buf).
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
const json = JSON.stringify(buf);
console.log(json);
// Prints: {"type":"Buffer","data":[1,2,3,4,5]}
const copy = JSON.parse(json, (key, value) => {
return value && value.type === 'Buffer' ?
Buffer.from(value) :
value;
});
console.log(copy);
// Prints: <Buffer 01 02 03 04 05>const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
const json = JSON.stringify(buf);
console.log(json);
// Prints: {"type":"Buffer","data":[1,2,3,4,5]}
const copy = JSON.parse(json, (key, value) => {
return value && value.type === 'Buffer' ?
Buffer.from(value) :
value;
});
console.log(copy);
// Prints: <Buffer 01 02 03 04 05>buf.toString([encoding[, start[, end]]])
تمت الإضافة في: v0.1.90
encoding<string> ترميز الأحرف المراد استخدامه. افتراضي:'utf8'.start<integer> إزاحة البايت لبدء فك التشفير عندها. افتراضي:0.end<integer> إزاحة البايت لإيقاف فك التشفير عندها (غير شامل). افتراضي:buf.length.- إرجاع: <string>
يقوم بفك تشفير buf إلى سلسلة وفقًا لترميز الأحرف المحدد في encoding. يمكن تمرير start و end لفك تشفير مجموعة فرعية فقط من buf.
إذا كان encoding هو 'utf8' وكان تسلسل البايت في الإدخال غير صالح UTF-8، فسيتم استبدال كل بايت غير صالح بحرف الاستبدال U+FFFD.
الحد الأقصى لطول مثيل السلسلة (بوحدات رمز UTF-16) متاح كـ buffer.constants.MAX_STRING_LENGTH.
import { Buffer } from 'node:buffer';
const buf1 = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf1[i] = i + 97;
}
console.log(buf1.toString('utf8'));
// Prints: abcdefghijklmnopqrstuvwxyz
console.log(buf1.toString('utf8', 0, 5));
// Prints: abcde
const buf2 = Buffer.from('tést');
console.log(buf2.toString('hex'));
// Prints: 74c3a97374
console.log(buf2.toString('utf8', 0, 3));
// Prints: té
console.log(buf2.toString(undefined, 0, 3));
// Prints: téconst { Buffer } = require('node:buffer');
const buf1 = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf1[i] = i + 97;
}
console.log(buf1.toString('utf8'));
// Prints: abcdefghijklmnopqrstuvwxyz
console.log(buf1.toString('utf8', 0, 5));
// Prints: abcde
const buf2 = Buffer.from('tést');
console.log(buf2.toString('hex'));
// Prints: 74c3a97374
console.log(buf2.toString('utf8', 0, 3));
// Prints: té
console.log(buf2.toString(undefined, 0, 3));
// Prints: tébuf.values()
أضيف في: v1.1.0
- الإرجاع: <Iterator>
ينشئ ويعيد مكررًا لقيم buf (بايتات). يتم استدعاء هذه الدالة تلقائيًا عندما يتم استخدام Buffer في عبارة for..of.
import { Buffer } from 'node:buffer';
const buf = Buffer.from('buffer');
for (const value of buf.values()) {
console.log(value);
}
// Prints:
// 98
// 117
// 102
// 102
// 101
// 114
for (const value of buf) {
console.log(value);
}
// Prints:
// 98
// 117
// 102
// 102
// 101
// 114const { Buffer } = require('node:buffer');
const buf = Buffer.from('buffer');
for (const value of buf.values()) {
console.log(value);
}
// Prints:
// 98
// 117
// 102
// 102
// 101
// 114
for (const value of buf) {
console.log(value);
}
// Prints:
// 98
// 117
// 102
// 102
// 101
// 114buf.write(string[, offset[, length]][, encoding])
أضيف في: v0.1.90
string<string> سلسلة نصية للكتابة إلىbuf.offset<integer> عدد البايتات التي يجب تخطيها قبل البدء في كتابةstring. الافتراضي:0.length<integer> أقصى عدد من البايتات للكتابة (لن تتجاوز البايتات المكتوبةbuf.length - offset). الافتراضي:buf.length - offset.encoding<string> ترميز الأحرف لـstring. الافتراضي:'utf8'.- الإرجاع: <integer> عدد البايتات المكتوبة.
يكتب string إلى buf عند offset وفقًا لترميز الأحرف في encoding. المعامل length هو عدد البايتات التي يجب كتابتها. إذا لم يحتوي buf على مساحة كافية لاحتواء السلسلة النصية بأكملها، فسيتم كتابة جزء فقط من string. ومع ذلك، لن يتم كتابة الأحرف المشفرة جزئيًا.
import { Buffer } from 'node:buffer';
const buf = Buffer.alloc(256);
const len = buf.write('\u00bd + \u00bc = \u00be', 0);
console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`);
// Prints: 12 bytes: ½ + ¼ = ¾
const buffer = Buffer.alloc(10);
const length = buffer.write('abcd', 8);
console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`);
// Prints: 2 bytes : abconst { Buffer } = require('node:buffer');
const buf = Buffer.alloc(256);
const len = buf.write('\u00bd + \u00bc = \u00be', 0);
console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`);
// Prints: 12 bytes: ½ + ¼ = ¾
const buffer = Buffer.alloc(10);
const length = buffer.write('abcd', 8);
console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`);
// Prints: 2 bytes : abbuf.writeBigInt64BE(value[, offset])
أضيف في: v12.0.0, v10.20.0
value<bigint> الرقم المراد كتابته فيbuf.offset<integer> عدد البايتات التي يجب تخطيها قبل البدء في الكتابة. يجب أن تستوفي الشرط:0 \<= offset \<= buf.length - 8. الافتراضي:0.- Returns: <integer>
offsetبالإضافة إلى عدد البايتات التي تم كتابتها.
يكتب value إلى buf عند offset المحدد كـ big-endian.
يتم تفسير value وكتابته كعدد صحيح مُوقَّع بتمثيل المتمم الثنائي.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeBigInt64BE(0x0102030405060708n, 0);
console.log(buf);
// Prints: <Buffer 01 02 03 04 05 06 07 08>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeBigInt64BE(0x0102030405060708n, 0);
console.log(buf);
// Prints: <Buffer 01 02 03 04 05 06 07 08>buf.writeBigInt64LE(value[, offset])
أضيف في: v12.0.0, v10.20.0
value<bigint> الرقم المراد كتابته فيbuf.offset<integer> عدد البايتات التي يجب تخطيها قبل البدء في الكتابة. يجب أن تستوفي الشرط:0 \<= offset \<= buf.length - 8. الافتراضي:0.- Returns: <integer>
offsetبالإضافة إلى عدد البايتات التي تم كتابتها.
يكتب value إلى buf عند offset المحدد كـ little-endian.
يتم تفسير value وكتابته كعدد صحيح مُوقَّع بتمثيل المتمم الثنائي.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeBigInt64LE(0x0102030405060708n, 0);
console.log(buf);
// Prints: <Buffer 08 07 06 05 04 03 02 01>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeBigInt64LE(0x0102030405060708n, 0);
console.log(buf);
// Prints: <Buffer 08 07 06 05 04 03 02 01>buf.writeBigUInt64BE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v14.10.0, v12.19.0 | هذه الوظيفة متاحة أيضًا باسم buf.writeBigUint64BE(). |
| v12.0.0, v10.20.0 | تمت الإضافة في: v12.0.0, v10.20.0 |
value<bigint> الرقم المراد كتابته فيbuf.offset<integer> عدد البايتات المراد تخطيها قبل البدء في الكتابة. يجب أن تستوفي الشرط:0 \<= offset \<= buf.length - 8. الافتراضي:0.- الإرجاع: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf عند offset المحدد كـ big-endian.
هذه الوظيفة متاحة أيضًا تحت الاسم المستعار writeBigUint64BE.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeBigUInt64BE(0xdecafafecacefaden, 0);
console.log(buf);
// Prints: <Buffer de ca fa fe ca ce fa de>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeBigUInt64BE(0xdecafafecacefaden, 0);
console.log(buf);
// Prints: <Buffer de ca fa fe ca ce fa de>buf.writeBigUInt64LE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v14.10.0, v12.19.0 | هذه الوظيفة متاحة أيضًا باسم buf.writeBigUint64LE(). |
| v12.0.0, v10.20.0 | تمت الإضافة في: v12.0.0, v10.20.0 |
value<bigint> الرقم المراد كتابته فيbuf.offset<integer> عدد البايتات المراد تخطيها قبل البدء في الكتابة. يجب أن تستوفي الشرط:0 \<= offset \<= buf.length - 8. الافتراضي:0.- الإرجاع: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf عند offset المحدد كـ little-endian.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeBigUInt64LE(0xdecafafecacefaden, 0);
console.log(buf);
// Prints: <Buffer de fa ce ca fe fa ca de>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeBigUInt64LE(0xdecafafecacefaden, 0);
console.log(buf);
// Prints: <Buffer de fa ce ca fe fa ca de>هذه الوظيفة متاحة أيضًا تحت الاسم المستعار writeBigUint64LE.
buf.writeDoubleBE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.11.15 | تمت الإضافة في: v0.11.15 |
value<number> الرقم المراد كتابته إلىbuf.offset<integer> عدد البايتات التي سيتم تخطيها قبل البدء في الكتابة. يجب أن يفي بـ0 \<= offset \<= buf.length - 8. افتراضي:0.- الإرجاع: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf في offset المحدد كـ big-endian. يجب أن يكون value رقم JavaScript. السلوك غير محدد عندما يكون value أي شيء بخلاف رقم JavaScript.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeDoubleBE(123.456, 0);
console.log(buf);
// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeDoubleBE(123.456, 0);
console.log(buf);
// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>buf.writeDoubleLE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.11.15 | تمت الإضافة في: v0.11.15 |
value<number> الرقم المراد كتابته إلىbuf.offset<integer> عدد البايتات التي سيتم تخطيها قبل البدء في الكتابة. يجب أن يفي بـ0 \<= offset \<= buf.length - 8. افتراضي:0.- الإرجاع: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf في offset المحدد كـ little-endian. يجب أن يكون value رقم JavaScript. السلوك غير محدد عندما يكون value أي شيء بخلاف رقم JavaScript.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeDoubleLE(123.456, 0);
console.log(buf);
// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeDoubleLE(123.456, 0);
console.log(buf);
// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>buf.writeFloatBE(value[, offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | إزالة noAssert ولم يعد هناك قسر ضمني للإزاحة إلى uint32. |
| v0.11.15 | تمت الإضافة في: v0.11.15 |
value<number> الرقم المراد كتابته إلىbuf.offset<integer> عدد البايتات المراد تخطيها قبل البدء في الكتابة. يجب أن تحقق0 \<= offset \<= buf.length - 4. الافتراضي:0.- Returns: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf عند offset المحدد بنظام النهاية الكبيرة (big-endian). السلوك غير محدد عندما يكون value أي شيء آخر غير رقم JavaScript.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeFloatBE(0xcafebabe, 0);
console.log(buf);
// Prints: <Buffer 4f 4a fe bb>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeFloatBE(0xcafebabe, 0);
console.log(buf);
// Prints: <Buffer 4f 4a fe bb>buf.writeFloatLE(value[, offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | إزالة noAssert ولم يعد هناك قسر ضمني للإزاحة إلى uint32. |
| v0.11.15 | تمت الإضافة في: v0.11.15 |
value<number> الرقم المراد كتابته إلىbuf.offset<integer> عدد البايتات المراد تخطيها قبل البدء في الكتابة. يجب أن تحقق0 \<= offset \<= buf.length - 4. الافتراضي:0.- Returns: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf عند offset المحدد بنظام النهاية الصغيرة (little-endian). السلوك غير محدد عندما يكون value أي شيء آخر غير رقم JavaScript.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeFloatLE(0xcafebabe, 0);
console.log(buf);
// Prints: <Buffer bb fe 4a 4f>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeFloatLE(0xcafebabe, 0);
console.log(buf);
// Prints: <Buffer bb fe 4a 4f>buf.writeInt8(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.5.0 | تمت الإضافة في: v0.5.0 |
value<عدد صحيح> الرقم المراد كتابته إلىbuf.offset<عدد صحيح> عدد البايتات المراد تخطيها قبل البدء في الكتابة. يجب أن يفي بالشرط0 \<= offset \<= buf.length - 1. افتراضي:0.- الإرجاع: <عدد صحيح>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf عند offset المحدد. يجب أن يكون value عددًا صحيحًا موقعًا صالحًا بحجم 8 بت. السلوك غير محدد عندما يكون value أي شيء بخلاف عدد صحيح موقع بحجم 8 بت.
يتم تفسير value وكتابته كعدد صحيح موقع بمتمم ثنائي.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(2);
buf.writeInt8(2, 0);
buf.writeInt8(-2, 1);
console.log(buf);
// Prints: <Buffer 02 fe>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(2);
buf.writeInt8(2, 0);
buf.writeInt8(-2, 1);
console.log(buf);
// Prints: <Buffer 02 fe>buf.writeInt16BE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
value<عدد صحيح> الرقم المراد كتابته إلىbuf.offset<عدد صحيح> عدد البايتات المراد تخطيها قبل البدء في الكتابة. يجب أن يفي بالشرط0 \<= offset \<= buf.length - 2. افتراضي:0.- الإرجاع: <عدد صحيح>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf عند offset المحدد بنظام النهاية الكبيرة (big-endian). يجب أن يكون value عددًا صحيحًا موقعًا صالحًا بحجم 16 بت. السلوك غير محدد عندما يكون value أي شيء بخلاف عدد صحيح موقع بحجم 16 بت.
يتم تفسير value وكتابته كعدد صحيح موقع بمتمم ثنائي.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(2);
buf.writeInt16BE(0x0102, 0);
console.log(buf);
// Prints: <Buffer 01 02>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(2);
buf.writeInt16BE(0x0102, 0);
console.log(buf);
// Prints: <Buffer 01 02>buf.writeInt16LE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
value<عدد صحيح> العدد المراد كتابته إلىbuf.offset<عدد صحيح> عدد البايتات المراد تخطيها قبل البدء في الكتابة. يجب أن يستوفي0 \<= offset \<= buf.length - 2. افتراضي:0.- الإرجاع: <عدد صحيح>
offsetبالإضافة إلى عدد البايتات التي تمت كتابتها.
يكتب value إلى buf في offset المحدد بصيغة little-endian. يجب أن تكون value عددًا صحيحًا صالحًا موقّعًا بطول 16 بت. السلوك غير محدد عندما تكون value أي شيء آخر غير عدد صحيح موقّع بطول 16 بت.
يتم تفسير value وكتابتها كعدد صحيح موقّع بنظام المكمل الثنائي.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(2);
buf.writeInt16LE(0x0304, 0);
console.log(buf);
// Prints: <Buffer 04 03>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(2);
buf.writeInt16LE(0x0304, 0);
console.log(buf);
// Prints: <Buffer 04 03>buf.writeInt32BE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
value<عدد صحيح> العدد المراد كتابته إلىbuf.offset<عدد صحيح> عدد البايتات المراد تخطيها قبل البدء في الكتابة. يجب أن يستوفي0 \<= offset \<= buf.length - 4. افتراضي:0.- الإرجاع: <عدد صحيح>
offsetبالإضافة إلى عدد البايتات التي تمت كتابتها.
يكتب value إلى buf في offset المحدد بصيغة big-endian. يجب أن تكون value عددًا صحيحًا صالحًا موقّعًا بطول 32 بت. السلوك غير محدد عندما تكون value أي شيء آخر غير عدد صحيح موقّع بطول 32 بت.
يتم تفسير value وكتابتها كعدد صحيح موقّع بنظام المكمل الثنائي.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeInt32BE(0x01020304, 0);
console.log(buf);
// Prints: <Buffer 01 02 03 04>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeInt32BE(0x01020304, 0);
console.log(buf);
// Prints: <Buffer 01 02 03 04>buf.writeInt32LE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
value<integer> الرقم المراد كتابته فيbuf.offset<integer> عدد البايتات التي يجب تخطيها قبل البدء في الكتابة. يجب أن تحقق0 \<= offset \<= buf.length - 4. الافتراضي:0.- الإرجاع: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf عند offset المحدد بصيغة little-endian. يجب أن تكون value عددًا صحيحًا موقعًا صالحًا مكونًا من 32 بت. السلوك غير محدد عندما تكون value أي شيء بخلاف عدد صحيح موقع مكون من 32 بت.
يتم تفسير value وكتابته كعدد صحيح موقع بمكمل الاثنان.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeInt32LE(0x05060708, 0);
console.log(buf);
// Prints: <Buffer 08 07 06 05>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeInt32LE(0x05060708, 0);
console.log(buf);
// Prints: <Buffer 08 07 06 05>buf.writeIntBE(value, offset, byteLength)
[السجل]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة و byteLength إلى uint32. |
| v0.11.15 | تمت الإضافة في: v0.11.15 |
value<integer> الرقم المراد كتابته فيbuf.offset<integer> عدد البايتات التي يجب تخطيها قبل البدء في الكتابة. يجب أن تحقق0 \<= offset \<= buf.length - byteLength.byteLength<integer> عدد البايتات المراد كتابتها. يجب أن تحقق0 < byteLength \<= 6.- الإرجاع: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب byteLength بايتات من value إلى buf عند offset المحدد بصيغة big-endian. يدعم ما يصل إلى 48 بت من الدقة. السلوك غير محدد عندما تكون value أي شيء بخلاف عدد صحيح موقع.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(6);
buf.writeIntBE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(6);
buf.writeIntBE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>buf.writeIntLE(value, offset, byteLength)
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة و byteLength إلى uint32. |
| v0.11.15 | تمت إضافته في: v0.11.15 |
value<عدد صحيح> الرقم المراد كتابته إلىbuf.offset<عدد صحيح> عدد البايتات التي يجب تخطيها قبل البدء في الكتابة. يجب أن تستوفي الشرط0 \<= offset \<= buf.length - byteLength.byteLength<عدد صحيح> عدد البايتات المراد كتابتها. يجب أن تستوفي الشرط0 \< byteLength \<= 6.- الإرجاع: <عدد صحيح>
offsetبالإضافة إلى عدد البايتات التي تمت كتابتها.
يكتب byteLength بايت من value إلى buf عند offset المحدد ك little-endian. يدعم ما يصل إلى 48 بت من الدقة. السلوك غير محدد عندما يكون value أي شيء بخلاف عدد صحيح موقّع.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(6);
buf.writeIntLE(0x1234567890ab, 0, 6);
console.log(buf);
// يطبع: <Buffer ab 90 78 56 34 12>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(6);
buf.writeIntLE(0x1234567890ab, 0, 6);
console.log(buf);
// يطبع: <Buffer ab 90 78 56 34 12>buf.writeUInt8(value[, offset])
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الدالة متاحة أيضًا باسم buf.writeUint8(). |
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إجبار ضمني للإزاحة إلى uint32. |
| v0.5.0 | تمت إضافته في: v0.5.0 |
value<عدد صحيح> الرقم المراد كتابته إلىbuf.offset<عدد صحيح> عدد البايتات التي يجب تخطيها قبل البدء في الكتابة. يجب أن تستوفي الشرط0 \<= offset \<= buf.length - 1. الافتراضي:0.- الإرجاع: <عدد صحيح>
offsetبالإضافة إلى عدد البايتات التي تمت كتابتها.
يكتب value إلى buf عند offset المحدد. يجب أن يكون value عددًا صحيحًا غير موقّع صالحًا مكونًا من 8 بتات. السلوك غير محدد عندما يكون value أي شيء بخلاف عدد صحيح غير موقّع مكون من 8 بتات.
هذه الدالة متاحة أيضًا تحت الاسم المستعار writeUint8.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeUInt8(0x3, 0);
buf.writeUInt8(0x4, 1);
buf.writeUInt8(0x23, 2);
buf.writeUInt8(0x42, 3);
console.log(buf);
// يطبع: <Buffer 03 04 23 42>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeUInt8(0x3, 0);
buf.writeUInt8(0x4, 1);
buf.writeUInt8(0x23, 2);
buf.writeUInt8(0x42, 3);
console.log(buf);
// يطبع: <Buffer 03 04 23 42>buf.writeUInt16BE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الدالة متاحة أيضًا باسم buf.writeUint16BE(). |
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إكراه ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
value<integer> الرقم المراد كتابته إلىbuf.offset<integer> عدد البايتات التي سيتم تخطيها قبل البدء في الكتابة. يجب أن يفي بـ0 \<= offset \<= buf.length - 2. الافتراضي:0.- الإرجاع: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf عند offset المحدد بتنسيق big-endian. يجب أن تكون value عددًا صحيحًا صالحًا غير موقّع 16 بت. السلوك غير محدد عندما تكون value أي شيء بخلاف عدد صحيح غير موقّع 16 بت.
هذه الدالة متاحة أيضًا تحت الاسم المستعار writeUint16BE.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeUInt16BE(0xdead, 0);
buf.writeUInt16BE(0xbeef, 2);
console.log(buf);
// Prints: <Buffer de ad be ef>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeUInt16BE(0xdead, 0);
buf.writeUInt16BE(0xbeef, 2);
console.log(buf);
// Prints: <Buffer de ad be ef>buf.writeUInt16LE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الدالة متاحة أيضًا باسم buf.writeUint16LE(). |
| v10.0.0 | تمت إزالة noAssert ولم يعد هناك إكراه ضمني للإزاحة إلى uint32. |
| v0.5.5 | تمت الإضافة في: v0.5.5 |
value<integer> الرقم المراد كتابته إلىbuf.offset<integer> عدد البايتات التي سيتم تخطيها قبل البدء في الكتابة. يجب أن يفي بـ0 \<= offset \<= buf.length - 2. الافتراضي:0.- الإرجاع: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf عند offset المحدد بتنسيق little-endian. يجب أن تكون value عددًا صحيحًا صالحًا غير موقّع 16 بت. السلوك غير محدد عندما تكون value أي شيء بخلاف عدد صحيح غير موقّع 16 بت.
هذه الدالة متاحة أيضًا تحت الاسم المستعار writeUint16LE.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeUInt16LE(0xdead, 0);
buf.writeUInt16LE(0xbeef, 2);
console.log(buf);
// Prints: <Buffer ad de ef be>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeUInt16LE(0xdead, 0);
buf.writeUInt16LE(0xbeef, 2);
console.log(buf);
// Prints: <Buffer ad de ef be>buf.writeUInt32BE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الدالة متاحة أيضًا باسم buf.writeUint32BE(). |
| v10.0.0 | تمت إزالة noAssert وعدم الإكراه الضمني للإزاحة إلى uint32 بعد الآن. |
| v0.5.5 | تمت إضافتها في: v0.5.5 |
value<عدد صحيح> العدد المراد كتابته إلىbuf.offset<عدد صحيح> عدد البايتات التي سيتم تخطيها قبل البدء في الكتابة. يجب أن يفي بالشرط0 <= offset <= buf.length - 4. افتراضي:0.- العائدات: <عدد صحيح>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf عند offset المحدد بنظام big-endian. يجب أن تكون value عددًا صحيحًا 32 بت غير مُوقَّع صالحًا. يكون السلوك غير محدد عندما تكون value أي شيء بخلاف عدد صحيح 32 بت غير مُوقَّع.
هذه الدالة متاحة أيضًا تحت الاسم المستعار writeUint32BE.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeUInt32BE(0xfeedface, 0);
console.log(buf);
// Prints: <Buffer fe ed fa ce>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeUInt32BE(0xfeedface, 0);
console.log(buf);
// Prints: <Buffer fe ed fa ce>buf.writeUInt32LE(value[, offset])
[السجل]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الدالة متاحة أيضًا باسم buf.writeUint32LE(). |
| v10.0.0 | تمت إزالة noAssert وعدم الإكراه الضمني للإزاحة إلى uint32 بعد الآن. |
| v0.5.5 | تمت إضافتها في: v0.5.5 |
value<عدد صحيح> العدد المراد كتابته إلىbuf.offset<عدد صحيح> عدد البايتات التي سيتم تخطيها قبل البدء في الكتابة. يجب أن يفي بالشرط0 <= offset <= buf.length - 4. افتراضي:0.- العائدات: <عدد صحيح>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب value إلى buf عند offset المحدد بنظام little-endian. يجب أن تكون value عددًا صحيحًا 32 بت غير مُوقَّع صالحًا. يكون السلوك غير محدد عندما تكون value أي شيء بخلاف عدد صحيح 32 بت غير مُوقَّع.
هذه الدالة متاحة أيضًا تحت الاسم المستعار writeUint32LE.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeUInt32LE(0xfeedface, 0);
console.log(buf);
// Prints: <Buffer ce fa ed fe>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeUInt32LE(0xfeedface, 0);
console.log(buf);
// Prints: <Buffer ce fa ed fe>buf.writeUIntBE(value, offset, byteLength)
[السجل]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الوظيفة متاحة أيضًا باسم buf.writeUintBE(). |
| v10.0.0 | تمت إزالة noAssert وعدم الإكراه الضمني للإزاحة و byteLength إلى uint32 بعد الآن. |
| v0.5.5 | تمت إضافتها في: v0.5.5 |
value<integer> الرقم المراد كتابته إلىbuf.offset<integer> عدد البايتات المراد تخطيها قبل البدء في الكتابة. يجب أن يستوفي الشرط0 \<= offset \<= buf.length - byteLength.byteLength<integer> عدد البايتات المراد كتابتها. يجب أن يستوفي الشرط0 \< byteLength \<= 6.- العائدات: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب byteLength بايت من value إلى buf في offset المحدد بصيغة النهاية الكبيرة. يدعم ما يصل إلى 48 بت من الدقة. السلوك غير محدد عندما يكون value أي شيء بخلاف عدد صحيح غير موقع.
هذه الوظيفة متاحة أيضًا تحت الاسم المستعار writeUintBE.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(6);
buf.writeUIntBE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(6);
buf.writeUIntBE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>buf.writeUIntLE(value, offset, byteLength)
[السجل]
| الإصدار | التغييرات |
|---|---|
| v14.9.0, v12.19.0 | هذه الوظيفة متاحة أيضًا باسم buf.writeUintLE(). |
| v10.0.0 | تمت إزالة noAssert وعدم الإكراه الضمني للإزاحة و byteLength إلى uint32 بعد الآن. |
| v0.5.5 | تمت إضافتها في: v0.5.5 |
value<integer> الرقم المراد كتابته إلىbuf.offset<integer> عدد البايتات المراد تخطيها قبل البدء في الكتابة. يجب أن يستوفي الشرط0 \<= offset \<= buf.length - byteLength.byteLength<integer> عدد البايتات المراد كتابتها. يجب أن يستوفي الشرط0 \< byteLength \<= 6.- العائدات: <integer>
offsetبالإضافة إلى عدد البايتات المكتوبة.
يكتب byteLength بايت من value إلى buf في offset المحدد بصيغة النهاية الصغيرة. يدعم ما يصل إلى 48 بت من الدقة. السلوك غير محدد عندما يكون value أي شيء بخلاف عدد صحيح غير موقع.
هذه الوظيفة متاحة أيضًا تحت الاسم المستعار writeUintLE.
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(6);
buf.writeUIntLE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer ab 90 78 56 34 12>const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(6);
buf.writeUIntLE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer ab 90 78 56 34 12>new Buffer(array)
[تاريخ]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | استدعاء هذا المنشئ يرسل تحذيرًا بالإهمال عند التشغيل من التعليمات البرمجية خارج دليل node_modules. |
| v7.2.1 | استدعاء هذا المنشئ لم يعد يرسل تحذيرًا بالإهمال. |
| v7.0.0 | استدعاء هذا المنشئ يرسل تحذيرًا بالإهمال الآن. |
| v6.0.0 | تم الإهمال منذ: v6.0.0 |
[مستقر: 0 - مهمل]
مستقر: 0 الاستقرار: 0 - مهمل: استخدم Buffer.from(array) بدلاً من ذلك.
array<integer[]> مصفوفة من البايتات المراد نسخها.
انظر Buffer.from(array).
new Buffer(arrayBuffer[, byteOffset[, length]])
[تاريخ]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | استدعاء هذا المنشئ يرسل تحذيرًا بالإهمال عند التشغيل من التعليمات البرمجية خارج دليل node_modules. |
| v7.2.1 | استدعاء هذا المنشئ لم يعد يرسل تحذيرًا بالإهمال. |
| v7.0.0 | استدعاء هذا المنشئ يرسل تحذيرًا بالإهمال الآن. |
| v6.0.0 | يتم دعم المعلمات byteOffset و length الآن. |
| v6.0.0 | تم الإهمال منذ: v6.0.0 |
| v3.0.0 | تمت الإضافة في: v3.0.0 |
[مستقر: 0 - مهمل]
مستقر: 0 الاستقرار: 0 - مهمل: استخدم Buffer.from(arrayBuffer[, byteOffset[, length]]) بدلاً من ذلك.
arrayBuffer<ArrayBuffer> | <SharedArrayBuffer>ArrayBufferأوSharedArrayBufferأو الخاصية.bufferلـTypedArray.byteOffset<integer> فهرس البايت الأول المراد عرضه. الافتراضي:0.length<integer> عدد البايتات المراد عرضها. الافتراضي:arrayBuffer.byteLength - byteOffset.
انظر Buffer.from(arrayBuffer[, byteOffset[, length]]).
new Buffer(buffer)
[السجل]
| الإصدار | التغييرات |
|---|---|
| الإصدار 10.0.0 | استدعاء هذا المُنشئ يصدر تحذيرًا بالتقادم عند تشغيله من التعليمات البرمجية خارج دليل node_modules. |
| الإصدار 7.2.1 | استدعاء هذا المُنشئ لم يعد يصدر تحذيرًا بالتقادم. |
| الإصدار 7.0.0 | استدعاء هذا المُنشئ يصدر تحذيرًا بالتقادم الآن. |
| الإصدار 6.0.0 | تم الإيقاف منذ: الإصدار 6.0.0 |
[مستقر: 0 - مُهمل]
مستقر: 0 الاستقرار: 0 - مُهمل: استخدم Buffer.from(buffer) بدلاً من ذلك.
buffer<Buffer> | <Uint8Array>Bufferموجود أوUint8Arrayلنسخ البيانات منه.
انظر Buffer.from(buffer).
new Buffer(size)
[السجل]
| الإصدار | التغييرات |
|---|---|
| الإصدار 10.0.0 | استدعاء هذا المُنشئ يصدر تحذيرًا بالتقادم عند تشغيله من التعليمات البرمجية خارج دليل node_modules. |
| الإصدار 8.0.0 | new Buffer(size) سيعيد ذاكرة مملوءة بالأصفار افتراضيًا. |
| الإصدار 7.2.1 | استدعاء هذا المُنشئ لم يعد يصدر تحذيرًا بالتقادم. |
| الإصدار 7.0.0 | استدعاء هذا المُنشئ يصدر تحذيرًا بالتقادم الآن. |
| الإصدار 6.0.0 | تم الإيقاف منذ: الإصدار 6.0.0 |
[مستقر: 0 - مُهمل]
مستقر: 0 الاستقرار: 0 - مُهمل: استخدم Buffer.alloc() بدلاً من ذلك (انظر أيضًا Buffer.allocUnsafe()).
size<integer> الطول المطلوب لـBufferالجديد.
انظر Buffer.alloc() و Buffer.allocUnsafe(). هذا المتغير من المُنشئ يعادل Buffer.alloc().
new Buffer(string[, encoding])
[التاريخ]
| الإصدار | التغييرات |
|---|---|
| v10.0.0 | يؤدي استدعاء هذا المُنشئ إلى إصدار تحذير إهمال عند تشغيله من التعليمات البرمجية خارج دليل node_modules. |
| v7.2.1 | لم يعد استدعاء هذا المُنشئ يصدر تحذير إهمال. |
| v7.0.0 | يؤدي استدعاء هذا المُنشئ إلى إصدار تحذير إهمال الآن. |
| v6.0.0 | مُهمل منذ: v6.0.0 |
[مستقر: 0 - مُهمل]
مستقر: 0 الاستقرار: 0 - مُهمل: استخدم Buffer.from(string[, encoding]) بدلاً من ذلك.
راجع Buffer.from(string[, encoding]).
الصنف: File
[التاريخ]
| الإصدار | التغييرات |
|---|---|
| v23.0.0 | يجعل نسخ مثيلات الملف ممكنًا. |
| v20.0.0 | لم يعد تجريبيًا. |
| v19.2.0, v18.13.0 | تمت الإضافة في: v19.2.0, v18.13.0 |
- يمتد: <Blob>
يوفر File معلومات حول الملفات.
new buffer.File(sources, fileName[, options])
تمت الإضافة في: v19.2.0, v18.13.0
sources<string[]> | <ArrayBuffer[]> | <TypedArray[]> | <DataView[]> | <Blob[]> | <File[]> مصفوفة من كائنات السلاسل، أو <ArrayBuffer>، أو <TypedArray>، أو <DataView>، أو <File>، أو <Blob>، أو أي مزيج من هذه الكائنات، والتي سيتم تخزينها داخلFile.fileName<string> اسم الملف.options<Object>endings<string> واحد من'transparent'أو'native'. عند التعيين إلى'native'، سيتم تحويل نهايات الأسطر في أجزاء مصدر السلسلة إلى نهاية السطر الأصلية للنظام الأساسي كما هو محدد بواسطةrequire('node:os').EOL.type<string> نوع محتوى الملف.lastModified<number> تاريخ آخر تعديل للملف. الافتراضي:Date.now().
file.name
أُضيف في: v19.2.0, v18.13.0
- النوع: <string>
اسم الملف (File).
file.lastModified
أُضيف في: v19.2.0, v18.13.0
- النوع: <number>
تاريخ آخر تعديل لـ الملف (File).
واجهات برمجة تطبيقات الوحدة النمطية node:buffer
في حين أن كائن Buffer متاح ككائن عام، توجد واجهات برمجة تطبيقات إضافية متعلقة بـ Buffer وهي متاحة فقط عبر الوحدة النمطية node:buffer التي يتم الوصول إليها باستخدام require('node:buffer').
buffer.atob(data)
أُضيف في: v15.13.0, v14.17.0
[مستقر: 3 - قديم]
مستقر: 3 الاستقرار: 3 - قديم. استخدم Buffer.from(data, 'base64') بدلاً من ذلك.
data<any> سلسلة الإدخال المشفرة بـ Base64.
فك ترميز سلسلة من البيانات المشفرة بـ Base64 إلى بايتات، وتشفير تلك البايتات إلى سلسلة باستخدام Latin-1 (ISO-8859-1).
يمكن أن تكون data أي قيمة JavaScript يمكن تحويلها إلى سلسلة.
يتم توفير هذه الدالة فقط للتوافق مع واجهات برمجة تطبيقات منصة الويب القديمة ويجب عدم استخدامها أبدًا في التعليمات البرمجية الجديدة، لأنها تستخدم سلاسل لتمثيل بيانات ثنائية وتسبق إدخال المصفوفات المكتوبة في JavaScript. بالنسبة إلى التعليمات البرمجية التي تعمل باستخدام واجهات برمجة تطبيقات Node.js، فإن التحويل بين السلاسل المشفرة بـ base64 والبيانات الثنائية يجب أن يتم باستخدام Buffer.from(str, 'base64') و buf.toString('base64').
buffer.btoa(data)
أُضيف في: v15.13.0, v14.17.0
[مستقر: 3 - قديم]
مستقر: 3 الاستقرار: 3 - قديم. استخدم buf.toString('base64') بدلاً من ذلك.
data<any> سلسلة ASCII (Latin1).
يفك ترميز سلسلة إلى بايتات باستخدام Latin-1 (ISO-8859)، ويشفر تلك البايتات إلى سلسلة باستخدام Base64.
يمكن أن تكون data أي قيمة JavaScript يمكن تحويلها إلى سلسلة.
يتم توفير هذه الدالة فقط للتوافق مع واجهات برمجة تطبيقات منصة الويب القديمة ويجب عدم استخدامها أبدًا في التعليمات البرمجية الجديدة، لأنها تستخدم سلاسل لتمثيل بيانات ثنائية وتسبق إدخال المصفوفات المكتوبة في JavaScript. بالنسبة إلى التعليمات البرمجية التي تعمل باستخدام واجهات برمجة تطبيقات Node.js، فإن التحويل بين السلاسل المشفرة بـ base64 والبيانات الثنائية يجب أن يتم باستخدام Buffer.from(str, 'base64') و buf.toString('base64').
buffer.isAscii(input)
تمت الإضافة في: v19.6.0, v18.15.0
- input <Buffer> | <ArrayBuffer> | <TypedArray> الإدخال المراد التحقق منه.
- Returns: <boolean>
تُرجع هذه الدالة true إذا كان input يحتوي فقط على بيانات مرمزة بـ ASCII صالحة، بما في ذلك الحالة التي يكون فيها input فارغًا.
تطرح خطأً إذا كان input عبارة عن مخزن مؤقت منفصل للصفيف.
buffer.isUtf8(input)
تمت الإضافة في: v19.4.0, v18.14.0
- input <Buffer> | <ArrayBuffer> | <TypedArray> الإدخال المراد التحقق منه.
- Returns: <boolean>
تُرجع هذه الدالة true إذا كان input يحتوي فقط على بيانات مرمزة بـ UTF-8 صالحة، بما في ذلك الحالة التي يكون فيها input فارغًا.
تطرح خطأً إذا كان input عبارة عن مخزن مؤقت منفصل للصفيف.
buffer.INSPECT_MAX_BYTES
تمت الإضافة في: v0.5.4
- <integer> افتراضي:
50
تُرجع الحد الأقصى لعدد البايتات التي سيتم إرجاعها عند استدعاء buf.inspect(). يمكن تجاوز ذلك بواسطة وحدات المستخدم. راجع util.inspect() لمزيد من التفاصيل حول سلوك buf.inspect().
buffer.kMaxLength
تمت الإضافة في: v3.0.0
- <integer> أكبر حجم مسموح به لمثيل
Bufferواحد.
اسم مستعار لـ buffer.constants.MAX_LENGTH.
buffer.kStringMaxLength
تمت الإضافة في: v3.0.0
- <integer> أقصى طول مسموح به لمثيل
stringواحد.
اسم مستعار لـ buffer.constants.MAX_STRING_LENGTH.
buffer.resolveObjectURL(id)
أضيف في: الإصدار v16.7.0
[مستقر: 1 - تجريبي]
مستقر: 1 الاستقرار: 1 - تجريبي
id<string> سلسلة عنوان URL'blob:nodedata:...'تم إرجاعها بواسطة استدعاء سابق لـURL.createObjectURL().- إرجاع: <Blob>
يقوم بحل 'blob:nodedata:...' وكائن <Blob> مرتبط مسجل باستخدام استدعاء سابق لـ URL.createObjectURL().
buffer.transcode(source, fromEnc, toEnc)
[سجل التغييرات]
| الإصدار | التغييرات |
|---|---|
| v8.0.0 | يمكن الآن أن يكون المعامل source عبارة عن Uint8Array. |
| v7.1.0 | أضيف في: الإصدار v7.1.0 |
source<Buffer> | <Uint8Array> مثيلBufferأوUint8Array.fromEnc<string> الترميز الحالي.toEnc<string> ترميز الهدف.- إرجاع: <Buffer>
يقوم بإعادة ترميز مثيل Buffer أو Uint8Array المحدد من ترميز أحرف إلى آخر. يُرجع مثيل Buffer جديد.
يُطلق خطأ إذا حددت fromEnc أو toEnc ترميزات أحرف غير صالحة أو إذا لم يكن التحويل من fromEnc إلى toEnc مسموحًا به.
الترميزات المدعومة بواسطة buffer.transcode() هي: 'ascii' و 'utf8' و 'utf16le' و 'ucs2' و 'latin1' و 'binary'.
ستستخدم عملية التحويل رموز الاستبدال إذا كان لا يمكن تمثيل تسلسل بايت معين بشكل كاف في ترميز الهدف. على سبيل المثال:
import { Buffer, transcode } from 'node:buffer';
const newBuf = transcode(Buffer.from('€'), 'utf8', 'ascii');
console.log(newBuf.toString('ascii'));
// Prints: '?'const { Buffer, transcode } = require('node:buffer');
const newBuf = transcode(Buffer.from('€'), 'utf8', 'ascii');
console.log(newBuf.toString('ascii'));
// Prints: '?'نظرًا لأن علامة اليورو (€) غير قابلة للتمثيل في US-ASCII، فسيتم استبدالها بـ ؟ في Buffer الذي تم تحويل ترميزه.
الفئة: SlowBuffer
تم الإيقاف منذ: الإصدار 6.0.0
[ثابت: 0 - تم الإيقاف]
ثابت: 0 الثبات: 0 - تم الإيقاف: استخدم Buffer.allocUnsafeSlow() بدلاً من ذلك.
راجع Buffer.allocUnsafeSlow(). لم تكن هذه فئة بالمعنى الذي أعاده فيه المنشئ دائمًا مثيل Buffer، بدلاً من مثيل SlowBuffer.
new SlowBuffer(size)
تم الإيقاف منذ: الإصدار 6.0.0
[ثابت: 0 - تم الإيقاف]
ثابت: 0 الثبات: 0 - تم الإيقاف: استخدم Buffer.allocUnsafeSlow() بدلاً من ذلك.
size<عدد صحيح> الطول المطلوب لـSlowBufferالجديد.
راجع Buffer.allocUnsafeSlow().
ثوابت Buffer
تمت الإضافة في: الإصدار 8.2.0
buffer.constants.MAX_LENGTH
[السجل]
| الإصدار | التغييرات |
|---|---|
| v22.0.0 | تم تغيير القيمة إلى 232 - 1 في معماريات 64 بت. |
| v15.0.0 | تم تغيير القيمة إلى 231 في معماريات 64 بت. |
| v14.0.0 | تم تغيير القيمة من 232 - 1 إلى 231 - 1 في معماريات 64 بت. |
| v8.2.0 | تمت الإضافة في: الإصدار 8.2.0 |
- <عدد صحيح> أكبر حجم مسموح به لمثيل
Bufferواحد.
في معماريات 32 بت، هذه القيمة حاليًا 231 - 1 (حوالي 1 جيجابايت).
في معماريات 64 بت، هذه القيمة حاليًا 253 - 1 (حوالي 8 بيتابايت).
وهي تعكس v8::TypedArray::kMaxLength في الخلفية.
تتوفر هذه القيمة أيضًا كـ buffer.kMaxLength.
buffer.constants.MAX_STRING_LENGTH
تمت الإضافة في: الإصدار 8.2.0
- <عدد صحيح> أكبر طول مسموح به لمثيل
stringواحد.
يمثل أكبر length يمكن أن يمتلكه بدائي string، ويتم حسابه بوحدات رمز UTF-16.
قد تعتمد هذه القيمة على محرك JS المستخدم.
Buffer.from()، Buffer.alloc()، و Buffer.allocUnsafe()
في إصدارات Node.js قبل 6.0.0، تم إنشاء مثيلات Buffer باستخدام وظيفة البناء Buffer، والتي تخصص Buffer المرتجع بشكل مختلف بناءً على الوسائط المقدمة:
- تمرير رقم كأول وسيط إلى
Buffer()(على سبيل المثالnew Buffer(10)) يخصص كائنBufferجديد بالحجم المحدد. قبل Node.js 8.0.0، الذاكرة المخصصة لمثل هذه المثيلاتBufferغير مهيأة وقد تحتوي على بيانات حساسة. يجب تهيئة مثيلاتBufferهذه لاحقًا إما باستخدامbuf.fill(0)أو عن طريق الكتابة إلىBufferبأكمله قبل قراءة البيانات منBuffer. بينما هذا السلوك مقصود لتحسين الأداء، فقد أظهرت تجربة التطوير أن هناك حاجة إلى تمييز أكثر وضوحًا بين إنشاءBufferسريع ولكنه غير مهيأ مقابل إنشاءBufferأبطأ ولكنه أكثر أمانًا. منذ Node.js 8.0.0، تقومBuffer(num)وnew Buffer(num)بإرجاعBufferبذاكرة مهيأة. - تمرير سلسلة أو مصفوفة أو
Bufferكأول وسيط ينسخ بيانات الكائن الذي تم تمريره إلىBuffer. - تمرير
ArrayBufferأوSharedArrayBufferيُرجعBufferيشارك الذاكرة المخصصة مع مخزن المصفوفة المحدد.
نظرًا لأن سلوك new Buffer() يختلف اعتمادًا على نوع الوسيط الأول، فقد يتم إدخال مشكلات أمنية وموثوقية عن غير قصد في التطبيقات عند عدم إجراء التحقق من صحة الوسيط أو تهيئة Buffer.
على سبيل المثال، إذا تمكن مهاجم من جعل تطبيق ما يتلقى رقمًا حيث يُتوقع وجود سلسلة، فقد يستدعي التطبيق new Buffer(100) بدلاً من new Buffer("100")، مما يؤدي إلى تخصيص مخزن مؤقت بحجم 100 بايت بدلاً من تخصيص مخزن مؤقت بحجم 3 بايت بالمحتوى "100". هذا ممكن بشكل شائع باستخدام استدعاءات JSON API. نظرًا لأن JSON يميز بين الأنواع الرقمية والسلاسل، فإنه يسمح بحقن الأرقام حيث قد يتوقع تطبيق مكتوب ببساطة لا يتحقق من صحة مدخلاته بشكل كافٍ أن يتلقى دائمًا سلسلة. قبل Node.js 8.0.0، قد يحتوي المخزن المؤقت الذي يبلغ حجمه 100 بايت على بيانات عشوائية موجودة مسبقًا في الذاكرة، لذلك يمكن استخدامه للكشف عن أسرار في الذاكرة لمهاجم بعيد. منذ Node.js 8.0.0، لا يمكن أن يحدث الكشف عن الذاكرة لأن البيانات مملوءة بالصفر. ومع ذلك، لا تزال الهجمات الأخرى ممكنة، مثل التسبب في تخصيص مخازن مؤقتة كبيرة جدًا بواسطة الخادم، مما يؤدي إلى تدهور الأداء أو التعطل بسبب استنفاد الذاكرة.
لجعل إنشاء مثيلات Buffer أكثر موثوقية وأقل عرضة للخطأ، تم إهمال الأشكال المختلفة لمنشئ new Buffer() واستبدالها بطرق منفصلة Buffer.from() و Buffer.alloc() و Buffer.allocUnsafe().
يجب على المطورين ترحيل جميع الاستخدامات الحالية لمنشئات new Buffer() إلى إحدى واجهات برمجة التطبيقات الجديدة هذه.
Buffer.from(array)تُرجعBufferجديدًا يحتوي على نسخة من الثمانيات المتوفرة.Buffer.from(arrayBuffer[, byteOffset[, length]])تُرجعBufferجديدًا يشارك نفس الذاكرة المخصصة مثلArrayBufferالمحدد.Buffer.from(buffer)تُرجعBufferجديدًا يحتوي على نسخة من محتوياتBufferالمحدد.Buffer.from(string[, encoding])تُرجعBufferجديدًا يحتوي على نسخة من السلسلة المتوفرة.Buffer.alloc(size[, fill[, encoding]])تُرجعBufferمهيأة جديدة بالحجم المحدد. هذه الطريقة أبطأ منBuffer.allocUnsafe(size)ولكنها تضمن أن مثيلاتBufferالتي تم إنشاؤها حديثًا لا تحتوي أبدًا على بيانات قديمة يحتمل أن تكون حساسة. سيتم طرحTypeErrorإذا لم يكنsizeرقمًا.Buffer.allocUnsafe(size)وBuffer.allocUnsafeSlow(size)تُرجع كل منهماBufferغير مهيأة جديدة بالحجم المحددsize. نظرًا لأنBufferغير مهيأة، فقد يحتوي الجزء المخصص من الذاكرة على بيانات قديمة يحتمل أن تكون حساسة.
قد يتم تخصيص مثيلات Buffer التي تم إرجاعها بواسطة Buffer.allocUnsafe() و Buffer.from(string) و Buffer.concat() و Buffer.from(array) من مجموعة ذاكرة داخلية مشتركة إذا كان size أقل من أو يساوي نصف Buffer.poolSize. المثيلات التي تم إرجاعها بواسطة Buffer.allocUnsafeSlow() لا تستخدم أبدًا مجموعة الذاكرة الداخلية المشتركة.
خيار سطر الأوامر --zero-fill-buffers
أضيف في: v5.10.0
يمكن بدء تشغيل Node.js باستخدام خيار سطر الأوامر --zero-fill-buffers لجعل جميع مثيلات Buffer المخصصة حديثًا مملوءة بالصفر افتراضيًا عند الإنشاء. بدون هذا الخيار، فإن المخازن المؤقتة التي تم إنشاؤها باستخدام Buffer.allocUnsafe() و Buffer.allocUnsafeSlow() و new SlowBuffer(size) ليست مملوءة بالصفر. قد يكون لاستخدام هذا العلم تأثير سلبي قابل للقياس على الأداء. استخدم الخيار --zero-fill-buffers فقط عند الضرورة لفرض أن مثيلات Buffer المخصصة حديثًا لا يمكن أن تحتوي على بيانات قديمة يحتمل أن تكون حساسة.
$ node --zero-fill-buffers
> Buffer.allocUnsafe(5);
<Buffer 00 00 00 00 00>ما الذي يجعل Buffer.allocUnsafe() و Buffer.allocUnsafeSlow() "غير آمنين"؟
عند استدعاء Buffer.allocUnsafe() و Buffer.allocUnsafeSlow()، يكون جزء الذاكرة المخصص غير مهيأ (غير مملوء بالأصفار). في حين أن هذا التصميم يجعل تخصيص الذاكرة سريعًا جدًا، فقد يحتوي جزء الذاكرة المخصص على بيانات قديمة يحتمل أن تكون حساسة. يمكن أن يسمح استخدام Buffer تم إنشاؤه بواسطة Buffer.allocUnsafe() دون الكتابة الكاملة فوق الذاكرة بتسريب هذه البيانات القديمة عند قراءة ذاكرة Buffer.
في حين أن هناك مزايا أداء واضحة لاستخدام Buffer.allocUnsafe()، يجب توخي الحذر الإضافي لتجنب إدخال نقاط ضعف أمنية في التطبيق.