जावा एनआईओ - स्कैटर

जैसा कि हम जानते हैं कि जावा NIO डेटा IO परिचालनों के लिए जावा के पारंपरिक IO API की तुलना में अधिक अनुकूलित API है। अधिक अतिरिक्त समर्थन जो कि जावा NIO प्रदान करता है / से कई बफ़र्स के लिए / से डेटा पढ़ना / लिखना है। और लेखन समर्थन को स्कैटर और इकट्ठा के रूप में कहा जाता है, जिसमें डेटा को रीड डेटा के मामले में एकल चैनल से कई बफ़र्स तक फैलाया जाता है, जबकि राइट डेटा के मामले में कई बफ़र्स से एकल चैनल तक डेटा एकत्र किया जाता है।

चैनल से इस मल्टीपल रीड एंड राइट को प्राप्त करने के लिए ScatteringByteChannel और GatheringByteChannel API है जो जावा NIO डेटा को उदाहरण के रूप में पढ़ने और लिखने के लिए प्रदान करता है।

ScatteringByteChannel

Read from multiple channels - इसमें हमने एक चैनल से डेटा को कई बफ़र्स में पढ़ने के लिए बनाया था। इस मल्टीपल बफर को आबंटित किया जाता है और इसे बफर टाइप ऐरे में जोड़ा जाता है। फिर इस ऐरे को स्केटरिंगबाइटचैनल रीड () मेथड के पैरामीटर के रूप में पास किया जाता है। इस क्रम में चैनल बफ़र्स सरणी में होता है। एक बफ़र भर जाने के बाद, चैनल अगले बफ़र को भरने के लिए आगे बढ़ता है।

निम्न उदाहरण से पता चलता है कि जावा एनआईओ में डेटा का प्रकीर्णन कैसे किया जाता है

सी: /Test/temp.txt

Hello World!
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ScatteringByteChannel;

public class ScatterExample {	
   private static String FILENAME = "C:/Test/temp.txt";
   public static void main(String[] args) {
      ByteBuffer bLen1 = ByteBuffer.allocate(1024);
      ByteBuffer bLen2 = ByteBuffer.allocate(1024);
      FileInputStream in;
      try {
         in = new FileInputStream(FILENAME);
         ScatteringByteChannel scatter = in.getChannel();
         scatter.read(new ByteBuffer[] {bLen1, bLen2});
         bLen1.position(0);
         bLen2.position(0);
         int len1 = bLen1.asIntBuffer().get();
         int len2 = bLen2.asIntBuffer().get();
         System.out.println("Scattering : Len1 = " + len1);
         System.out.println("Scattering : Len2 = " + len2);
      } 
      catch (FileNotFoundException exObj) {
         exObj.printStackTrace();
      }
      catch (IOException ioObj) {
         ioObj.printStackTrace();
      }
   }
}

उत्पादन

Scattering : Len1 = 1214606444
Scattering : Len2 = 0

अंत में यह निष्कर्ष निकाला जा सकता है कि जावा NIO में तितर बितर / इकट्ठा दृष्टिकोण को एक अनुकूलित और मल्टीटास्क के रूप में पेश किया जाता है जब इसे ठीक से उपयोग किया जाता है। यह आपको ऑपरेटिंग सिस्टम को सौंपने की अनुमति देता है जो आपके द्वारा एकाधिक बाल्टियों में पढ़े गए डेटा को अलग करने, या कोडांतरण का काम करता है। डेटा को पूरी तरह से अलग कर देना। कोई संदेह नहीं है कि यह समय बचाता है और बफर कॉपी से बचने के लिए ऑपरेटिंग सिस्टम का अधिक कुशलता से उपयोग करता है, और कोड की मात्रा को लिखने और डिबग करने की आवश्यकता को कम करता है।