Nodejs - writefile ثنائي - خيارات


قراءة النص والبيانات الثنائية مع تيارات مقروءة Node. js هذا البرنامج التعليمي سوف يشرح استخدام وإنشاء node. js تيارات مقروءة: معلومات الإصدار الكاتب: جيف بارسزوسكي نشرت: أوغست 3rd، 2013 العلامات: نوديجس، تيارات المستوى: متوسط ​​المتطلبات: كريبتو، الأحداث، تثبيت وحدات نمب Node. js v0.10 (آخر مستقرة هو v0.10.15 حتى كتابة هذه السطور)، ولكن تيارات عموما جزء من Node. js من أيامه الأولى Streams2 يمكن استخدامها مع الإصدارات القديمة من العقدة باستخدام نبم وحدة مقروءة للقراءة تستهلك أو تستخدم تيارات قابلة للقراءة مثال بسيط لقراءة ملف وتردده إلى ستدوت: إنشاء ملخص SH1 لملف وتردد النتيجة إلى ستدوت (على غرار شاسوم): يتم تشغيل حدث البيانات على المقطع القابل للقراءة لكل جزء من البيانات، لذلك يمكنك تحديث هضم مع كل قطعة كما تذهب، ثم أخيرا يتم إطلاق الحدث نهاية عندما انتهت تيار حتى تتمكن من إخراج النتيجة النهائية. لاحظ أنه في كل مرة تقوم فيها باستدعاء. أون () لتسجيل المستمع فإنه يرسل تيار الأصلي حتى تتمكن من أساليب السلسلة بسهولة. مع Node. js 0.10 هناك طريقة أفضل لاستهلاك تيارات. تعمل الواجهة القابلة للقراءة على تسهيل العمل مع مجموعات البث، خاصة التيارات التي تريد أن تفعل أشياء أخرى بين إنشاء ساحة مشاركات واستخدام البث. هذه تيارات قابلة للقراءة أحدث هي سحب تيارات حيث يمكنك طلب البيانات عند قراءة لذلك بدلا من وجود البيانات دفعت لك. المفتاح لفهم هذا المثال هو أنه مع واجهة streams2 الجديدة القابلة للقراءة، سيتم نشر حدث قابل للقراءة في أقرب وقت البيانات المتاحة للقراءة ويمكنك استدعاء. read () لقراءة أجزاء منه. مرة واحدة لا يوجد المزيد من البيانات المتاحة. قراءة () ترجع فارغة، ولكن بعد ذلك يتم تشغيل حدث آخر قابل للقراءة مرة أخرى عندما تكون البيانات متاحة مرة أخرى. ويستمر هذا حتى نهاية الملف عندما يتم إطلاق نهاية مثل قبل. إنتاج تيار قابل للقراءة لاستخدام تيارات مع نظام الملفات أو من هتب، يمكنك استخدام الأساليب الأساسية فس و هتب لبناء تيار، ولكن كيف يمكنك إنشاء تيار الخاص بك وملء مع البيانات قد تكون هذه البيانات من قاعدة بيانات أو من أي عدد من المصادر. في ما يلي مثال لإنشاء تيار قابل للقراءة يتم إنشاؤه من البيانات الثنائية العشوائية، ثم تجزئة ذلك مثل قبل. هذا سيكون مفيدا في إنشاء تيارات للاختبار: ملاحظة: بعد قراءة () يسمى، يجب علينا مواصلة القراءة حتى نقوم به أو حتى دفع () ترجع كاذبة. استخدام Streams2 مع الإصدارات Node. js القديمة إذا كنت تريد أن تجعل هذه الشفرة تعمل مع Node. js أقدم من 0.10، يمكنك تضمين التبعية للقراءة-تيار في package. json الخاص بك وتغيير السطر 5 على النحو التالي: وهذا سوف تستخدم الأم تيار قابل للقراءة إذا كان الإصدار Node. js هو 0.10 وإذا لم يكن كذلك، فإنه سيتم تحميل وحدة بوليفيل للقراءة-تيار واستخدامها من هناك. إيقاف السيرة الذاتية مؤقتا للتيار و Streams2 نظرا لأن الجداول يمكن أن توفر أحيانا بيانات بسرعة أكبر مما يمكن أن يستهلكه التطبيق، تتضمن الجداول القدرة على الإيقاف المؤقت، ويتم تخزين البيانات إلى أن يتم استئناف البث. قبل تيارات 2، يجب أن تولي اهتماما دقيقا لإيقاف واستئناف الأساليب وكذلك التخزين المؤقت للبيانات حتى استأنفت. ومع ذلك، يمكن قراءتها من streams2 (Node. js 0.10 أو عبر حزمة المقطع القابل للقراءة) تنفيذ هذه الوظيفة لك وتيارات متوقفة تلقائيا حتى يتم استدعاء. read (). يمكنك أيضا التفاف تيارات القديمة مع مقروء لتنفيذ واجهة جديدة على تيار القديم: حالة أخرى حيث كنت بحاجة للقلق حول وقفة واستئناف هو إذا كان الكود المستهلكة يستخدم القديم دفع نمط اسلوب الدعوة. أون (39data39، المستمع). وهذا يضع تيار في وضع التوافق إلى الوراء، وكنت بحاجة إلى استدعاء. pause () و. resume () للسيطرة على معدل البيانات القادمة إلى التطبيق الخاص بك. اطلع على مستندات ستريم أبي للحصول على التفاصيل إذا كنت تستخدم الواجهة القديمة في شفرتك. تيارات الكائن في البداية عندما تم إدخال تيارات أبي الرسمية أشارت إلى أن قطع البيانات التي يجري تدفقها ستكون مخازن أو سلاسل، ولكن العديد من المستخدمين وجدوا أنه كان كبيرا لتكون قادرة على تيار الكائنات أيضا. Streams2 في Node. js 0.10 أضاف وضع الكائن إلى تيارات لإضفاء الطابع الرسمي على كيفية هذا يجب أن تعمل. عندما تكون في وضع الكائن. قراءة (ن) ببساطة إرجاع الكائن التالي (تجاهل n). لتبديل تيار في وضع الكائن، قم بتعيين الخاصية أوبجكتمود إلى ترو في الخيارات المستخدمة لإنشاء دفق قابل للقراءة الخاص بك حتى تتمكن من استخدام الكائنات في تيارات بسهولة كما يمكنك استخدام المخازن المؤقتة وسلاسل، ولكن القيد الوحيد هو أن الكائنات لك لا يمكن أن يكون نول لأن ذلك سيشير إلى انتهاء البث. Node. js تيارات قابلة للقراءة هي مرنة وبسيطة Node. js تيارات قابلة للقراءة من السهل أن تستهلك وحتى بسيطة لبناء. لا يمكنك فقط بث البيانات الثنائية والسلاسل ولكن أيضا الكائنات ولا تزال تستفيد من وظائف البث. آمل أن تستمتعوا بهذه الجولة السريعة من تيارات قابلة للقراءة، واسمحوا لي أن أعرف إذا كان لديك أي أسئلة. لقراءة إضافية شير ذيس بادج أنت تجعل الأمور أصعب بكثير مما يجب أن تكون. يأخذ الكائن المخزن المؤقت لعقدة base64 كمدخل ويقوم بكل ذلك فك التشفير بالنسبة لك. يمكنك فقط تجريد البيانات: صورة. جزء من سلسلة base64 وتمرير تلك البيانات إلى وريتيفيلاسيستانت. يحتاج وريتيفيلاسيستانت فقط لاتخاذ سلسلة base64 وتمرير ذلك كوسيطة إلى منشئ المخزن مؤقت. أيضا، وجود على مكالمة أوبينسينك كسر الأشياء أيضا. المخزن المؤقت يأخذ سلسلة وترميز، ثم يستخدم قيمة الترميز لمعالجة السلسلة في سلسلة من وحدات البايت، لذلك عندما تخبره أن السلسلة هي base64، فإنه سيتم فك base64 بالنسبة لك وإنشاء مجموعة فك الشفرة المناسبة من وحدات البايت الكتابة إلى الملف. أجاب 11 سبتمبر 11 في 11: 30NOD جس والبيانات الثنائية تحديث: لا شيء من هذا يجب أن يكون ضروريا، كما فيلريدستريم في أحدث عقدة يستخدم مخازن بشكل افتراضي. ومع ذلك، يبدو أن I39m تفعل شيئا خاطئا أو المستندات قديمة، كما أنها لا تعمل على هذا النحو على عقدة الرأس. منطقتين حيث Ncl. js39s إكسليند تفتقر للأسف هو التعامل مع البيانات الثنائية وسلاسل كبيرة. في هذا المنصب I39d ترغب في الذهاب على بعض التقنيات للتعامل مع البيانات الثنائية في العقدة، ومعظمها يدور حول التعامل مع جامع القمامة V839s، وحقيقة أن سلاسل في عقدة ليست مصنوعة للبيانات الثنائية، أنها 39re مصنوعة ل أوتف-8 و أوتف-16. هناك ثلاثة تفاصيل رئيسية غوري التي تجعل العمل مع البيانات في Node. js الألم: سلاسل كبيرة (غ 64K) ليست صديقك. يتم تخزين البيانات الثنائية (و أسي) في سلسلة عقدة كأول بايتة من سلسلة أوتف-16. البيانات الثنائية يمكن تخزين أكثر كفاءة في Node. js كما المخزن المؤقت يتيح نظرة على البند الأول، سلاسل كبيرة aren39t صديقك. Node. js الخالق ري نفسه تناول هذه المسألة نفسه في مقارنة الأداء الذي أدلى به مع نجينكس. إذا عرضت قوات الدفاع الشعبي، (أو ننظر إلى الرسم البياني المستخرج أدناه) you39ll نرى أن عقدة لا وظيفة لائق مواكبة نجينكس حتى يضرب علامة بايت 64، ثم الأداء فقط ينهار. السبب، في ry39s الكلمات: V8 لديه جامع القمامة الأجيال التي تتحرك الأشياء حول عشوائيا. عقدة لا يمكن الحصول على مؤشر لبيانات سلسلة الخام للكتابة إلى مأخذ. يمكنك أن ترى هذا في الرسم البياني ذات الصلة في الشرائح ryan39s. التي I39ve استخراج مريح ونشر أدناه (آمل أن don39t العقل ريان). ما كان واضحا 39t على الفور لي بعد قراءة هذا ما كان هذا يعني في الحالات التي كان واحد يستخدم عقدة لتمرير حول بت كبيرة من البيانات الثنائية التي تأتي في سلاسل. إذا كنت تستخدم عقدة ليقول، وقراءة من نظام الملفات تحصل مرة أخرى سلسلة ثنائية، وليس المخزن المؤقت. كان سؤالي: كوتيف لدي بيانات ثنائية عالقة بالفعل في سلسلة أوتف-16 رديء، ولكن بعد ذلك التمسك بها في المخزن المؤقت قبل إرساله بها، سوف تساعد مع speed. quot الجواب زيادة في الإنتاجية من 100 ميبسيك إلى 160 ميبسيك. تحقق من الرسم البياني أدناه من بلدي اختبارات الأداء، حيث لعبت مع أحجام ريدشونك مختلفة (كم البيانات فيليريدستريم يقرأ في وقت واحد والأحجام المخزن المؤقت (كم البيانات التي تخزينها في المخزن المؤقت قبل التنظيف إلى مأخذ): كما ترون (بوف) يتفوق على السراويل التي يكتبها باستخدام السلاسل (ستر)، ويمكن رؤية الفرق بين الشفرتين أدناه، لم أكن أعتقد في البداية أن القيام بهذا التحويل من شأنه أن يساعد على الإطلاق، وأنا أحسب مرة واحدة كان بالفعل في (مثل البيانات من فليريدستريم هو)، يمكن للمرء أيضا مسح ذلك إلى المقبس والاستمرار في هذا يجعلني أتساءل عما إذا كانت التطبيقات الأخرى أيضا أن يكون أفضل قبالة تراكم انتاجها (ربما حتى أوتف-8 الناتج) في العازلة حيثما كان ذلك ممكنا، ثم أخيرا بيغ المخزن المؤقت، بدلا من إجراء المكالمات المتكررة إلى res. write يحتاج شخص لاختبار هذا بالإضافة إلى ذلك، وهذا يجعلني أتساءل عما إذا كان يمكن تحسين تحسينات إضافية لحالة الاختبار الخاصة بي إذا تم تعديل الكائن فليريدستريم عقدة إلى إرجاع مخزن مؤقت بدلا من سلسلة. أديتيونالي، قد تكون تسأل عن استخدام بوفسيزي أكبر من حجم ريادتشونك، الذي فعلت اختبار حقا، ولكن وجدت أنه لم يكن هناك الكثير من الفرق عند استخدام أكبر عازلة، وبالتالي فإن الاستراتيجية المثلى حقا لا يبدو أن يقرأ 64KiB قطعة إلى 64KiB العازلة. يمكنك الاطلاع على هذه البيانات أسفل المشاركة. في البيانات أنا الرسوم البيانية أعلاه، وأنا قدمت عددا من أشواط مع أب - c 100 - n 1000 ضد 1 ملف ميب تغيير تشونزيزي و ريادزيزي. يمكن رؤية شفرة العينة ذات الصلة أدناه. سوف تكون عينة كاملة رمز مفترقتي من عقدة-paperboy. Synchronous ملف إو في Node. js أرسلت بواسطة ديف إدي في 26 مارس 2013 - العلامات: تيش هل يدعو fs. writeFileSync الزناد الكتابة متزامن لنظام الملفات إذا كنت معتادا على Node. js. أو قد سمعت على الأقل من ذلك، you39ve على الأرجح سمعت أنه يستخدم غير إو عرقلة، ويتيح لك القيام بعمل غير متزامن. أحد واجهات برمجة التطبيقات الأساسية التي توفرها عقدة لنظام الملفات مع واجهة برمجة التطبيقات هذه، يمكنك قراءة الملفات وكتابتها وإزالتها وما إلى ذلك، وإجراء المهام والتعديلات الأخرى المتعلقة بنظام الملفات. وتتبع واجهة برمجة التطبيقات هذه نمطا معياريا لتعريض وظيفتين لكل عملية: واحد للعمل غير المتزامن والآخر للعمل المتزامن. على سبيل المثال، إذا كنت ترغب في قراءة ملف في عقدة يمكنك القيام بذلك بشكل غير متزامن: ستواصل عقدة تنفيذ أي رمز جافا سكريبت التي تواجه أثناء قراءة الملف. بمجرد الانتهاء من كل جافاسكريبت ويجري تنفيذ الملف جاهز، سيتم تشغيل وظيفة مجهولة وطباعة محتويات الملف. يمكنك القيام بالمهمة نفسها بشكل متزامن: في هذا المثال، سيتم تعيين المحتويات على محتويات الملف، ولن يتم تنفيذ أي رمز جافا سكريبت أثناء قراءة الملف. يتم تنفيذ النهج الأول بشكل غير متزامن، وسوف تعود فورا إلى عدم حظر التعليمات البرمجية الخاصة بك من تشغيل. والثانية تتم بشكل متزامن، وسوف توقف التنفيذ حتى اكتمال المهمة. نفس 2 أنواع من الوظائف موجودة للكتابة، إعادة تسمية، حذف، الخ الملفات. متزامن يكتب لذا فإن السؤال هو، لا يدعو fs. writeFileSync يؤدي في الواقع الكتابة متزامن إلى نظام الملفات في عملية عقدة وسرلاند، it39s متزامن بمعنى أن تنفيذ أي جافا سكريبت يتم إيقاف، ولكن ماذا عن في نواة أن الكتابة غير المتزامنة هو وهو شيء مختلف جدا من الكتابة متزامن إلى نظام الملفات. لبقية هذه المدونة بلوق I39ll أن يتكلم في سياق نواة إلوموس، ونظام الملفات زفس. هناك طريقتان للإجابة على هذا السؤال. الطريقة الأكثر وضوحا هي سحب شفرة المصدر Node. js، والعثور على الوظائف التي تتحدث إلى نظام الملفات الذي يستخدم fs. js، ونرى كيف يتم استدعاؤها. أنا haven39t فعلت الكثير من العمل على جوهر عقدة، ومعرفة أنه يمكن (وعلى الأرجح أن) يستغرق وقتا طويلا للعثور على رمز كنت أبحث عنه. بدلا من ذلك، I39ll فقط استخدام دتريس للإجابة على السؤال، ونرى بالضبط ما عقدة يفعل. دتريس إلى الإنقاذ كتبت برنامجا اختبار زوجين التي تمارس هذه الوظائف نظام الملفات. باستخدام دتريس، we39ll تكون قادرا على رؤية ما أعلام ملف يتم فتح مع، والتي سوف تظهر ما إذا كانت العمليات متزامنة أم لا. fs. writeFile () هذا البرنامج النصي يمارس Node39s غير متزامن آلية كتابة الملف. باستخدام دتريس، يمكننا طباعة الأعلام التي تم تمريرها لفتح (2) لهذا الملف المحدد. ثم، باستخدام فيلفلاغس. يمكننا تحويل هذا الرقم العشري إلى الأسماء الرمزية التي تشكل عشري (انظر فتح (2) لمزيد من المعلومات). يخبر الأمر الأول دتريس بتشغيل العقدة writefile. js. والبحث عن أي من عائلة مفتوحة من سيسكالز. إذا كانت الوسيطة الأولى لفتح (اسم المسار) يطابق الملف الذي نكتب إليه، وطباعة سيسكال بالضبط أطلقت، والعلامة العشرية. اتضح أن Open64 (2) كان يسمى لملفنا، نظرا للخيارات التالية. OWRONLY. فتح الكتابة فقط أوكرات. إنشاء الملف إذا كان doesn39t موجودة أوترونك. اقتطاع الملف خيارات قياسية إلى حد ما لفتح ملف. وبما أن أيا من الخيارات غير متزامن إو (أوسينك أودسينك، الخ) هذا الملف الكتابة غير متزامن إلى زفس، والدعوة إلى الكتابة (2) يعود قبل أن يضمن البيانات أن يجلس على تخزين مستقرة. Node39s غير متزامن fs. writeFile يفعل بالفعل الكتابة غير متزامن إلى نظام الملفات. fs. writeFileSync () فماذا عن Node39s آلية الكتابة ملف متزامن، هو الكتابة الفعلية متزامن إلى نظام الملفات هذا البرنامج النصي سوف منع حلقة الحدث أثناء كتابة البيانات إلى الملف (أو حتى نفكر)، كما أنه يستخدم Node39s متزامن آلية كتابة الملف. نفس الأوامر أعلاه، ونفس الإخراج. Node39s fs. writeFileSync لا بدء كتابة متزامن إلى نظام الملفات. من وجهة نظر برنامج عقدة، ونحن نعلم نفس الشيء عند استدعاء fs. writeFileSync إرجاع، كما نعلم عندما يتم رد الاتصال إلى fs. writeFile. ونحن نعلم الدعوة الكامنة، والكتابة (2) عاد نحن لا نعرف أن البيانات جعلت ذلك إلى تخزين مستقرة. والفرق الوحيد بعد ذلك، هو أن واحد وظيفة كتل Node39s حلقة الحدث، في حين أن الآخر يسمح لمواصلة معالجة الأحداث. fs. createWriteStream () آلية أخرى تسمح ملف إو هو إنشاء والكتابة إلى عقدة وريتابلستريم. نفس الإخراج كما سبق، مرة أخرى. تفتح هذه الآلية الملف بنفس الأعلام على حد سواء fs. writeFile و fs. writeFileSync. fs. appendFile () حتى الكتابة إلى ملف يستخدم نفس الأعلام لفتح الملف، ماذا عن إلحاق نفس الحفر على النحو التالي حتى الأعلام مختلفة، that39s علامة جيدة. تم تبديل أوترنك ل أوابند. نظرا لأننا لم يعد اقتطاع الملف إلى 0 بايت وبدلا من ذلك إلحاق به. مرة أخرى، مثل كافة الأوامر أعلاه، fs. appendFile يفتح الملف غير المتزامن إو. fs. appendFileSync () وأخيرا وليس آخرا Let39s اختبار نسخة متزامنة من أبندفيل. نفس fs. appendFile الملف لا يتم فتح للكتابة متزامن. الأعلام الشائعة Let39s استخدام برنامج C بسيط لفتح ملف باستخدام فوبين (3C) لمعرفة ما الأعلام يستخدم. ثم تشغيله بنفس الأمر أعلاه لمعرفة ما أعلام فتح الملف مع. بالتأكيد، نفس الأعلام كما فتح ملف للكتابة في عقدة الأرض. fs. writeFileSync متزامن بمعنى أنه يمنع حلقة الحدث أثناء تنفيذها. أنها لا تطلب من النواة للقيام الكتابة متزامن لنظام الملفات الأساسي. هذا البرنامج النصي سوف منع حلقة الحدث أثناء كتابة البيانات إلى الملف (أو حتى نفكر). أي من الوظائف فوق الملفات المفتوحة إو متزامن. وبسبب هذا، كل ما نعرفه هو أن الدعوة إلى الكتابة (2) يعود، وليس أن البيانات قد كتبت إلى نظام الملفات وبيغ إلى تخزين مستقرة. Don39t الحصول على تعثرت على الأسماء، fs. writeSync doesn39t الكتابة بشكل متزامن إلى نظام الملفات. إذا كنت ترغب في فتح ملف إو متزامن، you39ll لديك لاستخدام وظائف المستوى السفلي فس التي تقدم عقدة مثل fs. open () و fs. fsync (). نسخ ديف إدي لتافادافيديجت

Comments