Java NIO - Kumpulkan

Seperti yang kita ketahui bahwa Java NIO adalah API yang lebih dioptimalkan untuk operasi data IO dibandingkan dengan IO API konvensional Java. Satu lagi dukungan tambahan yang disediakan Java NIO adalah membaca / menulis data dari / ke beberapa buffer ke saluran. dan dukungan tulis disebut sebagai Scatter and Gather di mana data tersebar ke beberapa buffer dari satu saluran jika data dibaca sementara data dikumpulkan dari beberapa buffer ke saluran tunggal jika data tulis.

Untuk mencapai beberapa baca dan tulis dari saluran ini, ada API ScatteringByteChannel dan GatheringByteChannel yang disediakan Java NIO untuk membaca dan menulis data seperti yang diilustrasikan dalam contoh di bawah ini.

GatheringByteChannel

write to multiple channels - Dalam hal ini kami membuat untuk menulis data dari beberapa buffer ke dalam satu saluran. Untuk ini lagi beberapa buffer dialokasikan dan ditambahkan ke array tipe buffer. Kemudian array ini diteruskan sebagai parameter ke metode GatheringByteChannel write () yang kemudian menulis data dari beberapa buffer dalam urutan buffer terjadi dalam array. Satu hal yang perlu diingat di sini adalah hanya data antara posisi dan batas buffer yang ditulis.

Contoh berikut menunjukkan bagaimana pengumpulan data dilakukan di Java NIO

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.GatheringByteChannel;

public class GatherExample {
   private static String FILENAME = "C:/Test/temp.txt";
   public static void main(String[] args) {
      String stream1 = "Gather data stream first";
      String stream2 = "Gather data stream second";
      ByteBuffer bLen1 = ByteBuffer.allocate(1024);
      ByteBuffer bLen2 = ByteBuffer.allocate(1024);
      // Next two buffer hold the data we want to write
      ByteBuffer bstream1 = ByteBuffer.wrap(stream1.getBytes());
      ByteBuffer bstream2 = ByteBuffer.wrap(stream2.getBytes());
      int len1 = stream1.length();
      int len2 = stream2.length();
      // Writing length(data) to the Buffer
      bLen1.asIntBuffer().put(len1);
      bLen2.asIntBuffer().put(len2);
      System.out.println("Gathering : Len1 = " + len1);
      System.out.println("Gathering : Len2 = " + len2);
      // Write data to the file
      try { 
         FileOutputStream out = new FileOutputStream(FILENAME);
         GatheringByteChannel gather = out.getChannel();						
         gather.write(new ByteBuffer[] {bLen1, bLen2, bstream1, bstream2});
         out.close();
         gather.close();
      }
      catch (FileNotFoundException exObj) {
         exObj.printStackTrace();
      }
      catch(IOException ioObj) {
         ioObj.printStackTrace();
      }
   }
}

Keluaran

Gathering : Len1 = 24
Gathering : Len2 = 25

Akhirnya dapat disimpulkan bahwa pendekatan pencar / kumpulkan di Java NIO diperkenalkan sebagai yang dioptimalkan dan multitasking ketika digunakan dengan benar. Ini memungkinkan Anda untuk mendelegasikan ke sistem operasi pekerjaan kasar memisahkan data yang Anda baca menjadi beberapa ember, atau perakitan potongan data yang berbeda menjadi satu kesatuan. Tidak diragukan lagi, ini menghemat waktu dan menggunakan sistem operasi secara lebih efisien dengan menghindari salinan buffer, dan mengurangi jumlah kode yang perlu ditulis dan di-debug.