Java NIO - Sebar

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.

ScatteringByteChannel

Read from multiple channels - Dalam hal ini kami membuat untuk membaca data dari satu saluran menjadi beberapa buffer. Untuk beberapa buffer ini dialokasikan dan ditambahkan ke array tipe buffer. Kemudian array ini diteruskan sebagai parameter ke metode ScatteringByteChannel read () yang kemudian menulis data dari saluran dalam urutan buffer terjadi dalam array. Setelah buffer penuh, saluran bergerak untuk mengisi buffer berikutnya.

Contoh berikut menunjukkan bagaimana penyebaran data dilakukan di Java NIO

C: /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();
      }
   }
}

Keluaran

Scattering : Len1 = 1214606444
Scattering : Len2 = 0

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 hal ini menghemat waktu dan menggunakan sistem operasi secara lebih efisien dengan menghindari salinan buffer, dan mengurangi jumlah kode yang perlu ditulis dan di-debug.