ما هو تاريخ Java NIO؟

Dec 29, 2025

ترك رسالة

ما هو تاريخ Java NIO؟

كمورد لشركة NIO، كنت دائمًا مفتونًا بالجوانب التكنولوجية التي تدفع صناعة السيارات إلى الأمام. في هذا المنشور، سوف أتعمق في تاريخ Java NIO، والذي يختلف تمامًا عن العلامة التجارية المعروفة للسيارات الكهربائية NIO ولكنه لا يقل أهمية في مجال تطوير البرمجيات.

أصول جافا NIO

تم تقديم Java NIO (الإدخال/الإخراج الجديد) في Java 1.4 كتعزيز رئيسي لقدرات الإدخال/الإخراج (I/O) الموجودة في Java. قبل Java NIO، كان الإدخال/الإخراج التقليدي في Java يعتمد على التدفقات. تم حظر الإدخال/الإخراج المستند إلى الدفق، مما يعني أنه عندما كان مؤشر الترابط يقوم بعملية إدخال/إخراج، كان عليه الانتظار حتى تكتمل العملية قبل أن يتمكن من القيام بأي شيء آخر. وكان هذا بمثابة عنق الزجاجة الرئيسي، خاصة في التطبيقات التي تتطلب التعامل مع عدد كبير من الاتصالات المتزامنة، مثل الخوادم.

كان الدافع وراء Java NIO هو توفير طريقة أكثر كفاءة وقابلة للتطوير لتنفيذ عمليات الإدخال/الإخراج. لقد قدم مجموعة جديدة من الفئات والواجهات التي تعتمد على القنوات والمخازن المؤقتة، بدلاً من التدفقات. تشبه القنوات التدفقات التقليدية، ولكنها ثنائية الاتجاه ويمكنها إجراء عمليات إدخال/إخراج غير محظورة. تُستخدم المخازن المؤقتة للاحتفاظ بالبيانات أثناء عمليات الإدخال/الإخراج.

المكونات الرئيسية لجافا NIO

القنوات

القنوات هي المكون المركزي لـ Java NIO. وهي تمثل اتصالاً مفتوحًا بكيان مثل ملف أو مقبس أو جهاز شبكة. هناك عدة أنواع من القنوات في Java NIO، بما في ذلكقناة الملف,قناة المقبس,ServerSocketChannel، وقناة مخطط البيانات.

قناة الملفيستخدم للقراءة من الملفات والكتابة إليها. يوفر طرقًا لقراءة البيانات من ملف إلى مخزن مؤقت وكتابة البيانات من مخزن مؤقت إلى ملف. على سبيل المثال:

استيراد java.io.FileInputStream؛ import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class FileChannelExample { public static void main(String[] args) { حاول (FileInputStream fis = new FileInputStream("example.txt"); FileChannelchannel = fis.getChannel()) { ByteBuffer buffer = ByteBuffer.allocate(1024); int bytesRead =channel.read(buffer); while (bytesRead != -1) { buffer.flip(); while (buffer.hasRemaining()) { System.out.print((char) buffer.get()); } buffer.clear(); bytesRead =channel.read(buffer); } } Catch (IOException e) { e.printStackTrace(); } } }

قناة المقبسوServerSocketChannelتستخدم للاتصالات عبر الشبكة.ServerSocketChannelيستخدم للاستماع للاتصالات الواردة على منفذ معين، في حينقناة المقبسيتم استخدامه لتأسيس اتصال بخادم بعيد أو للتعامل مع الاتصالات الواردة من العملاء.

المخازن المؤقتة

تُستخدم المخازن المؤقتة للاحتفاظ بالبيانات أثناء عمليات الإدخال/الإخراج. وهي في الأساس عبارة عن مصفوفة ذات حجم ثابت من نوع بيانات بدائي، مثلبايت,شار,كثافة العمليات، وما إلى ذلك. في Java NIO، المخزن المؤقت الأكثر استخدامًا هوByteBuffer، والذي يستخدم للاحتفاظ بالبايت.

تتمتع المخازن المؤقتة بثلاث خصائص مهمة: السعة والموضع والحد. السعة هي الحد الأقصى لعدد العناصر التي يمكن أن يحتويها المخزن المؤقت. الموضع هو مؤشر العنصر التالي المراد قراءته أو كتابته. الحد هو فهرس العنصر الأول الذي لا ينبغي قراءته أو كتابته.

محددات

تعد المحددات ميزة قوية في Java NIO والتي تسمح لسلسلة رسائل واحدة بالتعامل مع قنوات متعددة. يمكن تسجيل المحدد بقنوات متعددة، ويمكنه مراقبة هذه القنوات لأحداث مثل القراءة والكتابة والاتصال والقبول. عند حدوث حدث على القناة، سيقوم المحدد بإعلام سلسلة المحادثات، والتي يمكنها بعد ذلك التعامل مع الحدث.

فيما يلي مثال بسيط لاستخدام محدد للتعامل مع عدةقناة المقبساتصالات:

import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Iterator; import java.util.Set; public class SelectorExample { public static void main(String[] args) { حاول (ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); Selector Selector = Selector.open()) { serverSocketChannel.socket().bind(new InetSocketAddress(8080)); serverSocketChannel.configureBlocking(false); serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); بينما (صحيح) { int ReadyChannels = Selector.select(); إذا استمر (readyChannels == 0)؛ Set<SelectionKey>selectedKeys = Selector.selectedKeys(); Iterator<SelectionKey> keyIterator = SelectedKeys.iterator(); while (keyIterator.hasNext()) { SelectionKey key = keyIterator.next(); if (key.isAcceptable()) { ServerSocketChannel ssc = (ServerSocketChannel) key.channel(); مقبس قناة المقبس = ssc.accept(); المقبسChannel.configureBlocking(false); المقبسChannel.register(selector, SelectionKey.OP_READ); } else if (key.isReadable()) { SwitchChannel مقبسChannel = (SocketChannel) key.channel(); ByteBuffer buffer = ByteBuffer.allocate(1024); int bytesRead = المقبسChannel.read(buffer); if (bytesRead != -1) { buffer.flip(); while (buffer.hasRemaining()) { System.out.print((char) buffer.get()); } } } keyIterator.remove(); } } } Catch (IOException e) { e.printStackTrace(); } } }

تطور جافا NIO

على مر السنين، استمرت Java NIO في التطور. في Java 7، تم تقديم NIO.2 API، والتي قدمت المزيد من الميزات والتحسينات. قدم NIO.2 فئات جديدة لعمليات نظام الملفات، مثلطريق,المسارات، وملفات. سهلت هذه الفئات العمل مع الملفات والأدلة، وقدمت دعمًا أفضل للارتباطات الرمزية وسمات الملفات وعمليات الإدخال/الإخراج غير المتزامنة.

كان الإدخال/الإخراج غير المتزامن إضافة رئيسية إلى NIO.2. لقد سمح للتطبيقات بإجراء عمليات الإدخال / الإخراج دون حظر مؤشر ترابط الاستدعاء. وكان هذا مفيدًا بشكل خاص للتطبيقات التي تحتاج إلى التعامل مع عدد كبير من عمليات الإدخال/الإخراج المتزامنة، مثل خوادم الويب وخوادم قواعد البيانات.

Java NIO في سياق المركبات الكهربائية NIO

في حين أن Java NIO هو مفهوم برمجي، إلا أنه في عالم السيارات الكهربائية NIO مثل2025 نيو ES7,2025 نيو ES8، ونيو نيو ET5، تلعب البرمجيات دورًا حاسمًا. تعتمد الأنظمة داخل السيارة في سيارات NIO على خوارزميات برمجية فعالة لمهام مثل إدارة البطارية، والقيادة الذاتية، والترفيه. على الرغم من أنه قد لا يتم استخدام Java NIO بشكل مباشر في هذه الأنظمة، إلا أن مبادئ الإدخال/الإخراج الفعالة والبرمجة المتزامنة ذات صلة.

على سبيل المثال، في نظام القيادة الذاتية، تحتاج السيارة إلى معالجة كمية كبيرة من بيانات الاستشعار في الوقت الفعلي. يلزم إجراء عمليات إدخال/إخراج فعالة لقراءة البيانات من أجهزة الاستشعار مثل الكاميرات وأجهزة الاستشعار والرادارات، ولإرسال إشارات التحكم إلى المحركات. على غرار الطريقة التي توفر بها Java NIO عمليات إدخال/إخراج غير قابلة للحظر للتعامل مع اتصالات متعددة بكفاءة، يحتاج البرنامج الموجود في مركبات NIO إلى التعامل مع مصادر بيانات متعددة وتنفيذ العمليات بشكل متزامن دون التسبب في اختناقات.

2025 NIO ES73

الاستنتاج والدعوة إلى العمل

في الختام، تاريخ Java NIO هو قصة الابتكار والتحسين في مجال برمجة Java. منذ بداياته المتواضعة كحل لقيود الإدخال/الإخراج التقليدية، تطورت إلى مجموعة قوية من واجهات برمجة التطبيقات التي تدعم عمليات الإدخال/الإخراج الفعالة والقابلة للتطوير.

كمورد لشركة NIO، فأنا أفهم أهمية المكونات والبرامج عالية الجودة في صناعة السيارات. إذا كنت في السوق بحثًا عن حلول موثوقة ومبتكرة لمشاريع مركبات NIO الخاصة بك، فأنا أدعوك إلى الاتصال بي لمناقشة عملية الشراء. يمكننا استكشاف كيف يمكن لمنتجاتنا وخدماتنا أن تلبي احتياجاتك الخاصة وتساهم في نجاح مشاريعك.

مراجع

  • "Java NIO" لرون هيتشنز
  • وثائق جافا لواجهات برمجة تطبيقات NIO وNIO.2

إرسال التحقيق