Dec 08, 2025

จะรับชุดพร้อมจาก Java NIO Selector ได้อย่างไร

ฝากข้อความ

ในขอบเขตของการเขียนโปรแกรม Java แพ็คเกจ Java NIO (อินพุต/เอาต์พุตใหม่) นำเสนอวิธีที่มีประสิทธิภาพและมีประสิทธิภาพในการจัดการการทำงานของ I/O โดยเฉพาะอย่างยิ่งในสถานการณ์ที่จำเป็นต้องมี I/O ที่ทำงานพร้อมกันสูงและไม่มีการบล็อก หนึ่งในองค์ประกอบสำคัญใน Java NIO คือตัวเลือกซึ่งช่วยให้เธรดเดียวสามารถจัดการหลายช่องได้ ในบล็อกนี้ ในฐานะซัพพลายเออร์ NIO ฉันจะเจาะลึกวิธีรับชุดพร้อมใช้จาก Java NIO Selector

ทำความเข้าใจกับตัวเลือก Java NIO

ก่อนที่เราจะพูดถึงวิธีการรับชุดอุปกรณ์ที่พร้อม สิ่งสำคัญคือต้องเข้าใจว่ากตัวเลือกเป็น. กตัวเลือกใน Java NIO เป็นวัตถุที่สามารถใช้เพื่อตรวจสอบหลายรายการเลือกช่องได้อ็อบเจ็กต์สำหรับเหตุการณ์ I/O ต่างๆ เช่น อ่าน เขียน เชื่อมต่อ และยอมรับ ช่วยให้เธรดเดียวสามารถจัดการหลายช่องสัญญาณได้ ซึ่งช่วยปรับปรุงประสิทธิภาพของแอปพลิเคชันได้อย่างมาก

หากต้องการใช้กตัวเลือกเราต้องสร้างมันขึ้นมาก่อน นี่เป็นข้อมูลโค้ดง่ายๆ ในการสร้างตัวเลือก-

นำเข้า java.nio.channels.Selector; นำเข้า java.io.IOException; SelectorExample ระดับสาธารณะ { โมฆะสาธารณะคงหลัก (สตริง [] args) { ลอง { ตัวเลือกตัวเลือก = Selector.open (); System.out.println("ตัวเลือกเปิด: " + ตัวเลือก); } จับ (IOException e) { e.printStackTrace(); -

ในโค้ดนี้เราใช้เปิด()วิธีการของตัวเลือกคลาสเพื่อสร้างใหม่ตัวเลือกตัวอย่าง.

การลงทะเบียนช่องด้วย Selector

เมื่อเรามีตัวเลือกเราต้องลงทะเบียนอย่างน้อยหนึ่งรายการเลือกช่องได้วัตถุด้วย เมื่อเราลงทะเบียนช่องกับตัวเลือกเราระบุประเภทของกิจกรรมที่เราสนใจ กิจกรรมมี 4 ประเภท:SelectionKey.OP_READ-SelectionKey.OP_WRITE-SelectionKey.OP_CONNECT, และSelectionKey.OP_ACCEPT-

นี่คือตัวอย่างการลงทะเบียนกซ็อกเก็ตช่องด้วยตัวเลือกสำหรับกิจกรรมการอ่าน:

นำเข้า java.nio.channels.SocketChannel; นำเข้า java.nio.channels.Selector; นำเข้า java.io.IOException; นำเข้า java.net.InetSocketAddress; ChannelRegistration ระดับสาธารณะ { โมฆะสาธารณะคงหลัก (สตริง [] args) { ลอง { Selector selector = Selector.open (); SocketChannel socketChannel = SocketChannel.open(); socketChannel.configureBlocking (เท็จ); socketChannel.connect (InetSocketAddress ใหม่ ("example.com", 80)); socketChannel.register (ตัวเลือก, SelectionKey.OP_CONNECT); } จับ (IOException e) { e.printStackTrace(); -

ในโค้ดนี้ เราจะสร้างไฟล์ซ็อกเก็ตช่องและกำหนดค่าให้ไม่ปิดกั้น จากนั้นเราเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลและลงทะเบียนกับตัวเลือกสำหรับOP_CONNECTเหตุการณ์.

Buy Nio ET5 electric car in ChinaImport Nio ET5 electric car from China

เตรียมชุดให้พร้อม

ชุดเอพร้อมตัวเลือกประกอบด้วยคีย์การเลือกอ็อบเจ็กต์ที่พร้อมสำหรับการดำเนินการ I/O เพื่อจะได้ชุดที่พร้อม เราต้องโทรเรียกเจ้าหน้าที่ก่อนเลือก()วิธีการของตัวเลือก- ที่เลือก()วิธีการบล็อกจนกว่าช่องที่ลงทะเบียนไว้อย่างน้อยหนึ่งช่องจะพร้อมสำหรับการดำเนินการ I/O

ต่อไปนี้คือวิธีที่เราจะเตรียมชุดให้พร้อม:

นำเข้า java.nio.channels.Selector; นำเข้า java.nio.channels.SocketChannel; นำเข้า java.io.IOException; นำเข้า java.net.InetSocketAddress; นำเข้า java.nio.channels.SelectionKey; นำเข้า java.util.Iterator; GetReadySet ระดับสาธารณะ { โมฆะสาธารณะคงหลัก (สตริง [] args) { ลอง { ตัวเลือกตัวเลือก = Selector.open (); SocketChannel socketChannel = SocketChannel.open(); socketChannel.configureBlocking (เท็จ); socketChannel.connect (InetSocketAddress ใหม่ ("example.com", 80)); socketChannel.register (ตัวเลือก, SelectionKey.OP_CONNECT); ในขณะที่ (จริง) { int readyChannels = selector.select(); ถ้า (readyChannels == 0) ดำเนินการต่อ; ตัววนซ้ำ<SelectionKey> keyIterator = selector.selectedKeys().iterator(); ในขณะที่ (keyIterator.hasNext()) { คีย์ SelectionKey = keyIterator.next(); if (key.isConnectable()) { // จัดการเหตุการณ์การเชื่อมต่อ } else if (key.isReadable()) { // จัดการเหตุการณ์การอ่าน } else if (key.isWritable()) { // จัดการเหตุการณ์การเขียน } keyIterator.remove(); - catch (IOException e) { e.printStackTrace(); -

ในโค้ดนี้เราเรียกว่าเลือก()วิธีการแบบวนซ้ำ หากมีอย่างน้อยหนึ่งช่องสัญญาณพร้อม เราจะได้รับตัววนซ้ำบนคีย์ที่เลือกโดยใช้คีย์ที่เลือก()วิธีการของตัวเลือก- จากนั้นเราจะวนซ้ำคีย์ต่างๆ และตรวจสอบประเภทของเหตุการณ์สำหรับแต่ละคีย์ หลังจากประมวลผลคีย์แล้ว เราจะลบคีย์ออกจากตัววนซ้ำเพื่อหลีกเลี่ยงการประมวลผลอีกครั้ง

ข้อควรพิจารณาในทางปฏิบัติ

เมื่อทำงานกับชุดที่พร้อมของกตัวเลือกมีข้อควรพิจารณาในทางปฏิบัติหลายประการ

การถอดกุญแจ

ดังที่แสดงในตัวอย่างก่อนหน้านี้ การลบออกถือเป็นสิ่งสำคัญคีย์การเลือกจากตัววนซ้ำหลังจากประมวลผลแล้ว หากเราไม่ลบออก คีย์เดิมจะถูกประมวลผลอีกครั้งในการวนซ้ำครั้งถัดไป ซึ่งนำไปสู่การทำงานที่ไม่ถูกต้อง

การจัดการข้อผิดพลาด

เมื่อจัดการกับเหตุการณ์ I/O เราจำเป็นต้องจัดการกับข้อผิดพลาดอย่างเหมาะสม ตัวอย่างเช่น หากช่องพบข้อผิดพลาดระหว่างการอ่านหรือเขียน เราควรปิดช่องและลบออกคีย์การเลือกจากตัวเลือก-

การปรับแต่งประสิทธิภาพ

ที่เลือก()วิธีการอาจเป็นคอขวดของประสิทธิภาพในบางกรณี เราสามารถใช้เลือกตอนนี้()ซึ่งเป็นวิธีที่ไม่ปิดกั้นหรือเลือก (หมดเวลานาน)วิธีการซึ่งจะบล็อกตามระยะเวลาที่กำหนดเพื่อเพิ่มประสิทธิภาพการทำงาน

ข้อเสนอของเราในฐานะซัพพลายเออร์ NIO

ในฐานะซัพพลายเออร์ NIO เราเข้าใจถึงความสำคัญของการจัดการ I/O ที่มีประสิทธิภาพในแอปพลิเคชันสมัยใหม่ เรานำเสนอโซลูชันต่างๆ ที่เกี่ยวข้องกับ Java NIO รวมถึงไลบรารีโค้ดที่ได้รับการปรับปรุง บริการให้คำปรึกษา และโปรแกรมการฝึกอบรม ไม่ว่าคุณกำลังพัฒนาเซิร์ฟเวอร์เครือข่ายประสิทธิภาพสูงหรือแอปพลิเคชันที่ใช้ข้อมูลจำนวนมาก ความเชี่ยวชาญของเราจะช่วยให้คุณใช้ประโยชน์จากพลังของ Java NIO ได้อย่างเต็มที่

หากคุณสนใจในผลิตภัณฑ์และบริการของเรา โดยเฉพาะอย่างยิ่งในการใช้ประโยชน์สูงสุดจาก Java NIO Selectors เราขอเชิญคุณเข้าร่วมติดต่อเราเพื่อหารือเกี่ยวกับการจัดซื้อจัดจ้าง- เรามุ่งมั่นที่จะมอบโซลูชั่นที่ดีที่สุดที่เหมาะกับความต้องการเฉพาะของคุณ

บทสรุป

การรับชุดพร้อมใช้จาก Java NIO Selector เป็นการดำเนินการพื้นฐานในการเขียนโปรแกรม Java NIO ด้วยการทำความเข้าใจวิธีการสร้างตัวเลือกลงทะเบียนช่องสัญญาณ และรับชุดที่พร้อม คุณสามารถสร้างแอปพลิเคชัน I/O ประสิทธิภาพสูงและไม่บล็อกได้ ในฐานะซัพพลายเออร์ NIO เราพร้อมให้การสนับสนุนคุณในการใช้งาน Java NIO อย่างมีประสิทธิภาพ หากคุณต้องการสำรวจเพิ่มเติมเกี่ยวกับรถยนต์ไฟฟ้าและเทคโนโลยีขั้นสูง คุณสามารถดูได้ที่นีโอ ET5 รถยนต์ไฟฟ้า-

อ้างอิง

  • "Java NIO" โดย Ron Hitchens
  • เอกสาร Oracle Java บนแพ็คเกจ NIO
ส่งคำถาม