2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
ava स्तरस्य NIO इत्यस्य मूलभूतज्ञानस्य वर्णनं करोति, मूलभूतसमीक्षायै
जावा मध्ये NIO (Non-blocking I/O अथवा New I/O) इति जावा SE 1.4 तथा तदनन्तरं संस्करणेषु प्रवर्तमानस्य input/output operation API इत्यस्य नूतनः समुच्चयः अस्ति ।
पारम्परिक IO मॉडल् इत्यस्य तुलने एतत् उच्चतरदक्षतां उत्तमसमवर्तीप्रक्रियाक्षमतां च प्रदाति । NIO इत्यस्य मुख्यविशेषता तस्य अ-अवरोधन-विशेषता अस्ति, यत् एकं थ्रेड् बहुविध-I/O-चैनेल्-प्रबन्धनं कर्तुं शक्नोति, तस्मात् उच्च-समवर्ती-परिदृश्येषु अनुप्रयोग-प्रदर्शने महतीं सुधारं करोति
जावा एनआईओ इत्यस्य उपयोगपरिदृश्यं विशेषतया तादृशानां परिस्थितीनां कृते उपयुक्तं भवति यत्र बहूनां समवर्तीसंयोजनानां संसाधनं करणीयम् उदाहरणार्थं, संजालसर्वरस्य मध्ये एकः सूत्रः प्रत्येकस्य संयोजनस्य कृते स्वतन्त्रसूत्रस्य आवंटनस्य आवश्यकतां विना सहस्राणि क्लायन्ट् संयोजनानि प्रबन्धयितुं शक्नोति .प्रणालीसंसाधनस्य उपभोगं महत्त्वपूर्णतया न्यूनीकर्तुं शक्नोति तथा च प्रसंस्करणक्षमतासु सुधारं कर्तुं शक्नोति
चैनल् जावा एनआईओ इत्यस्मिन् दत्तांशप्रवाहस्य माध्यमम् अस्ति यत् एतत् द्विदिशायुक्तं भवति, तस्य उपयोगेन आँकडानां पठनं वा आँकडानां लेखनं वा कर्तुं शक्यते । चैनल् इत्यस्य मुख्यः लाभः अस्ति यत् ते अ-अवरोधिताः भवन्ति, यस्य अर्थः अस्ति यत् एकः सूत्रः बहुविधं चैनल् प्रबन्धयितुं शक्नोति यदा कस्मिन्चित् चैनले कोऽपि घटना न भवति तदा सूत्रं अवरुद्धं न भविष्यति, तस्य स्थाने अन्यकार्यं सम्भालितुं शक्नोति मुख्यचैनलप्रकाराः सन्ति : १.
FileChannel
: सञ्चिकापठनलेखनक्रियाणां कृते उपयुज्यते अस्य उपयोगः बफरतः सञ्चिकायां दत्तांशं लिखितुं, अथवा सञ्चिकातः बफरमध्ये दत्तांशं पठितुं शक्यते ।SocketChannel
: संजालसञ्चारयोः TCP संयोजनानां कृते उपयुज्यते, तथा च आँकडानां पठनलेखनयोः उपयोगः कर्तुं शक्यते ।ServerSocketChannel
: पारम्परिक ServerSocket इत्यस्य सदृशं नूतनं SocketChannel संयोजनं स्वीकुर्वितुं प्रयुक्तम् ।DatagramChannel
: UDP संचारार्थं उपयुज्यते, यत् डाटाग्रामं प्रेषयितुं प्राप्तुं च शक्नोति ।Buffer इति NIO मध्ये data संग्रहणार्थं प्रयुक्तं वस्तु अस्ति यत् एतत् एकं byte array अस्ति यत् data लिखितुं तस्मात् data पठितुं च शक्नोति । बफरस्य विशिष्टक्षमता भवति, तस्य द्वौ महत्त्वपूर्णौ गुणौ भवतः - स्थितिः सीमा च ।
बफरस्य मुख्याः प्रकाराः सन्तिByteBuffer
、CharBuffer
、ShortBuffer
、IntBuffer
、LongBuffer
、FloatBuffer
तथाDoubleBuffer
, प्रत्येकं प्रकारः आदिमदत्तांशप्रकारस्य अनुरूपः भवति ।
चयनकर्ता NIO मध्ये एकः मल्टिप्लेक्सरः अस्ति यः एकं थ्रेड् बहुभिः चैनल् तः घटनानां निरीक्षणं कर्तुं शक्नोति, यथा पठनं, लेखनं, संयोजयितुं, घटनाः प्राप्तुं च । चयनकर्ता अनुप्रयोगं सूचयति यदा एकः चैनलः I/O कार्याणां कृते सज्जः भवति । चयनकर्तानां उपयोगेन संजाल-अनुप्रयोगानाम् समवर्ती-प्रक्रिया-क्षमतायां महती उन्नतिः भवति यतोहि प्रत्येकस्य संयोजनस्य कृते सूत्रस्य निर्माणस्य आवश्यकता नास्ति
चयनकर्तानां मुख्यविधयः सन्ति- १.
select()
: यावत् न्यूनातिन्यूनम् एकः चैनलः I/O-सञ्चालनार्थं सज्जः न भवति तावत् अवरोधयति ।selectedKeys()
: सर्वेषां सज्जीकृतानां चैनलानां SelectionKey ऑब्जेक्ट्स् युक्तं Set रिटर्न् करोति ।wakeup()
: व्यत्ययः अवरुद्धःselect()
स्थानांतरण।SelectionKey
इदं चयनकर्तानां चैनलानां च मध्ये सम्बन्धः अस्ति
इदं पारम्परिकं I/O मॉडल् अस्ति जावा मध्ये पारम्परिकं Socket तथा ServerSocket APIs I/O अवरुद्ध्य आधारितम् अस्ति । अस्मिन् मोड् मध्ये यदा कश्चन थ्रेड् पठन-लेखन-क्रियाम् आरभते तदा I/O-क्रियायाः समाप्तिपर्यन्तं सूत्रं अवरुद्धं भवति । यदि पठनक्रियायाः कृते पठनीयः दत्तांशः नास्ति, अथवा लेखनक्रिया तत्क्षणं सम्पन्नं कर्तुं न शक्यते, तर्हि सूत्रं यावत् क्रियायाः समाप्तिः न भवति तावत् प्रतीक्षते ।
गुणाः:
अ-अवरोधक I/O Java NIO (New I/O) ढाञ्चायाः भागः अस्ति, यत् थ्रेड्-इत्येतत् अवरुद्धं विना पठन-लेखन-क्रियाः आरभ्यतुं शक्नोति । यदि पठनक्रियायाः कृते पठनीयः दत्तांशः नास्ति, अथवा लेखनक्रिया तत्क्षणं सम्पन्नं कर्तुं न शक्यते, तर्हि सूत्रं स्थगितम् न भविष्यति, अन्यकार्यं निरन्तरं कर्तुं शक्नोति
गुणाः:
मल्टीप्लेक्सिंग् इति एकेन थ्रेड् मार्गेण एकस्मिन् समये बहुविधसञ्चिकावर्णकानां निरीक्षणं करणीयम्, तथा च केवलं तदा एव वर्णकस्य उपरि कार्यं कर्तुं यदा सः सज्जः भवति (प्रायः दत्तांशः पठनीयः अस्ति, अथवा लेखनबफरः लेखनीयः इति अर्थः) जावा मध्ये बहुविधीकरणं कार्यान्वितुं चयनकर्तानां उपयोगः भवति ।
गुणाः:
सूचना:
व्यावहारिक-अनुप्रयोगेषु, अ-अवरोधक-I/O प्रायः बहुलीकरणेन सह उपयुज्यते । उदाहरणार्थं, सर्वरः बहुविध SocketChannel निरीक्षितुं Selector इत्यस्य उपयोगं कर्तुं शक्नोति यदा SocketChannel इत्यस्य दत्तांशः भवति यत् पठितुं वा लिखितुं वा शक्यते, तदा Selector सर्वरं सूचयिष्यति, सर्वरः च एतत् विशिष्टं SocketChannel अ-अवरुद्धरूपेण संसाधयिष्यति
जावा मध्ये Stream तथा Channel इति द्वौ भिन्नौ मार्गौ सन्ति यत् ते क्रमशः जावा इत्यस्य मानक IO पुस्तकालयस्य NIO पुस्तकालयस्य च सन्ति । अत्र द्वयोः अवधारणायोः विस्तृतः तुलना अस्ति ।
Stream जावा इत्यस्य मानक IO (blocking IO) मॉडलस्य भागः अस्ति, यत् क्रमेण आँकडानां पठनस्य लेखनस्य च मार्गं प्रदाति । Stream इति द्वयोः प्रकारयोः विभक्तम् अस्ति : InputStream तथा OutputStream, येषां उपयोगः क्रमशः आँकडानां पठनलेखनयोः कृते भवति ।एते धाराः बाइट् धाराः (यथा...InputStream
, OutputStream
) वर्णधारा वा (यथाReader
, Writer
)。
गुणाः:
close()
संसाधनं मुक्तुं विधिः।जावा 7 तः आरभ्य, try-with-resources कथनं स्वयमेव कार्यान्वयनम् बन्दं कर्तुं शक्नोतिAutoCloseable
स्ट्रीम सहितं अन्तरफलकसंसाधनम् । चैनल् Java NIO (New IO) मॉडलस्य भागः अस्ति, यत् Stream इत्यस्मात् उच्चस्तरस्य अमूर्ततां प्रदाति, येन आँकडानां अधिककुशलं संसाधनं भवति । चैनल्स् द्विदिशायुक्ताः भवितुम् अर्हन्ति, अर्थात् तेषां उपयोगेन दत्तांशपठनलेखनयोः उपयोगः कर्तुं शक्यते ।मुख्य Channel प्रकारेषु अन्तर्भवतिFileChannel
、SocketChannel
、ServerSocketChannel
तथाDatagramChannel
。
गुणाः:
सारांशं कुरुत
जावा-मध्ये I/O-सञ्चालन-प्रतिरूपाणां वर्गीकरणं समकालिक/अतुल्यकालिकस्य तथा अवरोधन/अवरोधनस्य द्वयोः आयामयोः आधारेण कर्तुं शक्यते ।
परिभाषा : समन्वयात्मकं अवरोधनं I/O सर्वाधिकं पारम्परिकं I/O मॉडलं भवति यदा कश्चन थ्रेड् I/O ऑपरेशनं (यथा पठनं वा लेखनं वा) आह्वयति तदा यावत् ऑपरेशनं न समाप्तं भवति तावत् थ्रेड् अवरुद्धः भविष्यति । यावत् क्रिया न समाप्तं भवति तावत् सूत्रं अन्यकार्यं कर्तुं न शक्नोति इति भावः ।
गुणाः:
InputStream
、OutputStream
、Socket
तथाServerSocket
दृश्य।उदाहरण:
पारम्परिकं प्रयोगं कुर्वन्तुInputStream
तथाOutputStream
सञ्चिकाः पठितुं लिखितुं च : १.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class SyncBlockingIOExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt")) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
परिभाषा : समकालिक-अ-अवरुद्ध-I/O इत्यस्मिन्, I/O-क्रियायाः आह्वानानन्तरं थ्रेड् अवरुद्धः न भविष्यति । यदि तत्क्षणं कार्यं सम्पन्नं कर्तुं न शक्यते तर्हि विधिः तत्क्षणमेव प्रत्यागमिष्यति, प्रायः विशेषं मूल्यं (यथा -1 अथवा 0) प्रत्यागमिष्यति अथवा अपवादं क्षिपति यत् कार्यं न सम्पन्नम् इति सूचयति
गुणाः:
Channels
तथाBuffers
, आह्वानेनconfigureBlocking(false)
चैनल् अ-अवरोध-विधाने सेट् कुर्वन्तु ।उदाहरण:
NIO इत्यस्य उपयोगेनFileChannel
अनिरोधकपठनलेखनयोः कृते : १.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.ByteBuffer;
public class SyncNonBlockingIOExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt");
FileChannel inChannel = fis.getChannel();
FileChannel outChannel = fos.getChannel()) {
ByteBuffer buffer = ByteBuffer.allocate(1024);
inChannel.configureBlocking(false);
while (inChannel.read(buffer) > 0) {
buffer.flip();
outChannel.write(buffer);
buffer.clear();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
परिभाषा: समन्वयात्मकः बहुविधः I/O मॉडलस्य उपयोगःSelector
(चयनकः) बहुविधं निरीक्षणं कर्तुंChannel
घटना।यदा सूत्रम् आह्वयतिSelector.select()
, यावत् न्यूनातिन्यूनम् एकः न भवति तावत् अवरुद्धं करिष्यतिChannel
घटनाः (पठनीयः, लेखनीयः, संयोजनानुरोधः इत्यादयः) भवन्ति ।
गुणाः:
Channel
, समवर्तीत्वं सुधरति ।Selector
तथाSelectionKey
तन्त्रं यत् बहूनां समवर्तीसंयोजनानां कुशलतापूर्वकं सम्भालितुं शक्नोति।उदाहरण:
NIO इत्यस्य उपयोगेनFileChannel
अनिरोधकपठनलेखनयोः कृते : १.
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Set;
public class SyncMultiplexingIOExample {
public static void main(String[] args) throws IOException {
try (Selector selector = Selector.open();
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open()) {
serverSocketChannel.socket().bind(new InetSocketAddress(8080));
serverSocketChannel.configureBlocking(false);
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
if (selector.select() > 0) {
Set<SelectionKey> keys = selector.selectedKeys();
for (SelectionKey key : keys) {
if (key.isAcceptable()) {
ServerSocketChannel ssc = (ServerSocketChannel) key.channel();
SocketChannel clientChannel = ssc.accept();
clientChannel.configureBlocking(false);
clientChannel.register(selector, SelectionKey.OP_READ);
}
}
keys.clear();
}
}
}
}
}
परिभाषा : अतुल्यकालिक-अ-अवरोधक-I/O-प्रतिरूपे, I/O-सञ्चालनस्य आरम्भस्य अनन्तरं तत्क्षणमेव धागः क्रियायाः समाप्तेः प्रतीक्षां विना प्रत्यागच्छति । यदा कार्यं सम्पन्नं भवति तदा थ्रेड् अतुल्यकालिकरूपेण कॉलबैक् फंक्शन् अथवा इवेण्ट् सूचनाद्वारा सूचितं भविष्यति ।
गुणाः:
AsynchronousChannel
अन्तरफलकं तस्य उपवर्गस्य कार्यान्वयनम्, यथाAsynchronousFileChannel
तथाAsynchronousSocketChannel
。उदाहरण:
NIO इत्यस्य उपयोगेनAsynchronousFileChannel
अतुल्यकालिकसञ्चिकापठनं लेखनं च कुर्वन्तु:
import java.io.IOException;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.nio.channels.AsynchronousFileChannel;
import java.nio.ByteBuffer;
import java.util.concurrent.CountDownLatch;
public class AsyncNonBlockingIOExample {
public static void main(String[] args) throws IOException, InterruptedException {
AsynchronousFileChannel inChannel = AsynchronousFileChannel.open(Paths.get("input.txt"), StandardOpenOption.READ);
AsynchronousFileChannel outChannel = AsynchronousFileChannel.open(Paths.get("output.txt"), StandardOpenOption.WRITE);
ByteBuffer buffer = ByteBuffer.allocate(1024);
CountDownLatch latch = new CountDownLatch(1);
inChannel.read(buffer, 0, buffer, 0, (channel, result) -> {
buffer.flip();
outChannel.write(buffer, 0, buffer, 0, null);
latch.countDown();
});
latch.await();
inChannel.close();
outChannel.close();
}
}
नोटः- अतुल्यकालिकप्रतिरूपस्य कृते अन्तर्निहितप्रचालनतन्त्रात् (Kernel) समर्थनस्य आवश्यकता भवति ।
परिभाषा : सिद्धान्ततः एतत् प्रतिरूपं नास्ति, यतः "अतुल्यकालिक" इत्यस्य अर्थः अस्ति यत् कार्यं पृष्ठभूमितः क्रियते, सूत्रं च अवरुद्धं न भवति । अतः असमकालिक अवरोधः I/O एकः विरोधाभासपूर्णः अवधारणा अस्ति तथा च व्यवहारे न दृश्यते ।
समुचितं I/O मॉडलं चयनं कार्यप्रदर्शनस्य संसाधनप्रबन्धनस्य च कृते महत्त्वपूर्णम् अस्ति । उच्च-समवर्ती-परिदृश्येषु, समकालिक-अ-अवरोधक-I/O अथवा समकालिक-मल्टिप्लेक्स-कृत-I/O-प्रतिरूपाः सामान्याः विकल्पाः सन्ति येषु परिदृश्येषु चरम-प्रदर्शनस्य प्रतिक्रिया-वेगस्य च आवश्यकता भवति, अतुल्यकालिकं अ-अवरोधक-I/O-प्रतिरूपं प्रथमः विकल्पः भवति
शून्य-प्रतिलिपि अवधारणा
शून्य-प्रतिलिपि-प्रौद्योगिक्याः अर्थः अस्ति यत् एकस्मात् स्थानात् अन्यस्मिन् स्थाने दत्तांशसञ्चारस्य प्रक्रियायां उपयोक्तृस्थानस्य कर्नेल्-स्थानस्य च मध्ये दत्तांशस्य प्रतिलिपिकरणस्य आवश्यकता नास्ति, अथवा न्यूनातिन्यूनं तादृशप्रतिलिपानां संख्यां न्यूनीकरोति, तस्मात् प्रणाल्याः कार्यक्षमतायां सुधारः भवति पारम्परिक I/O कार्येषु यदा दत्तांशः संजालतः अथवा डिस्कतः पठ्यते तदा प्रथमं कर्नेल् स्पेस इत्यत्र बफर इत्यत्र प्रतिलिपितः भवति, ततः कर्नेल् स्पेस तः उपयोक्तृस्थाने बफर इत्यत्र प्रतिलिपितः भवति तद्विपरीतम् शून्यप्रतिलिपौ प्रत्यक्षतया कर्नेल्-स्थाने दत्तांशं संसाधितुं शक्यते, अथवा कर्नेल्-स्थानात् प्रत्यक्षतया संजाल-यन्त्रे स्थानान्तरितुं शक्यते, अतः CPU-प्रतिलिपि-सञ्चालनं न्यूनीकरोति, प्रणाली-उपरिभारः न्यूनीकरोति, दत्तांश-सञ्चारस्य कार्यक्षमतायां च सुधारः भवति
शून्यप्रतिलिपेः स्रोतः
शून्यप्रतिलिपिस्य अवधारणा प्रथमवारं प्रचालनप्रणालीनिर्माणे प्रादुर्भूतवती, यस्य उद्देश्यं पारम्परिक I/O संचालनेषु आँकडाप्रतिलिपिकरणेन उत्पद्यमानस्य कार्यक्षमतायाः अटङ्कस्य समाधानं भवति स्म प्रारम्भिकसङ्गणकतन्त्रेषु सर्वेषु I/O-कार्यक्रमेषु उपयोक्तृस्थाने, कर्नेल्-स्थाने च बहुविधदत्तांशप्रतिकृतीनां आवश्यकता भवति स्म ।
प्रमुख तकनीकी बिन्दव
जावादेशे कार्यान्वयनम् : १.
जावा NIO (New I/O) ढाञ्चायाः माध्यमेन शून्य-प्रति-प्रौद्योगिकी समर्थयति । एनआईओ परिचयं कृतवान्FileChannel
तथाSocketChannel
तथा अन्यवर्गाः, ये अधिककुशलाः I/O कार्याणि प्रदास्यन्ति । विशेषतः, २.FileChannel.transferTo()
तथाFileChannel.transferFrom()
विधिः सञ्चिकाचैनलतः प्रत्यक्षतया सॉकेट् चैनले अथवा तद्विपरीतम् आँकडान् बफरमध्ये लोड् न कृत्वा दत्तांशं स्थानान्तरयितुं शक्नुवन्ति, अतः शून्यप्रतिलिपिः प्राप्तुं शक्यते ।
यथा, भवद्भिः बृहत् सञ्चिकायाः सामग्रीं जालपुटे प्रेषयितुं आवश्यकम् इति कल्पयतु पारम्परिकः उपायः प्रथमं सञ्चिकायाः सामग्रीं बफरमध्ये पठित्वा ततः बफरस्य सामग्रीं जालपुटे लिखितव्यम् अस्मिन् प्रतिलिपिक्रियाद्वयं भवति : एकं डिस्कतः बफरं प्रति अपरं बफरतः संजालपर्यन्तं ।उपयोगं कुर्वन्transferTo()
एतस्य पद्धतेः उपयोगे मध्यवर्तीबफरस्य आवश्यकतां विना प्रत्यक्षतया डिस्कतः जालपुटे दत्तांशं स्थानान्तरयितुं शक्यते, येन प्रतिलिपानां संख्या न्यूनीभवति, शून्यप्रतिलिपिः च प्राप्यते
ByteBuffer इत्यस्य उपयोगेन एकं उदाहरणम् :
ByteBuffer
इत्यादिBuffer
वर्गः (यथाCharBuffer
,ShortBuffer
इत्यादि) बफरं प्रदाति यत् उपयोक्तृस्थानस्य कर्नेल् स्थानस्य च मध्ये प्रत्यक्षतया प्रतिलिपिं न सम्मिलितं विना पूरयितुं रिक्तं वा कर्तुं शक्यते ।ByteBuffer
शून्य-प्रति-प्रौद्योगिक्यां प्रत्यक्षतया परोक्षतया वा उपयोक्तुं शक्यते : १.
ByteBuffer.allocateDirect(size)
निर्मितम्ByteBuffer
जावा-राशिं त्यक्त्वा प्रत्यक्षतया भौतिकस्मृतौ उदाहरणानि मैप् भवन्ति ।यदा तादृशस्य बफरस्य तुलना भवतिFileChannel
वाSocketChannel
एकत्र उपयुज्यमानं जावा-राशिद्वारा अतिरिक्तप्रतिकृतीनां आवश्यकतां विना भौतिकस्मृति-हार्डवेयर-यन्त्राणां मध्ये प्रत्यक्षतया दत्तांशं स्थानान्तरयितुं शक्यते । एतेन केषुचित् मञ्चेषु सत्या शून्यप्रतिलिपिः सक्षमा भवति ।FileChannel
इत्यस्यtransferTo()
तथाtransferFrom()
: एतानि पद्धतयः प्रत्यक्षतया दत्तांशं संग्रहीतुं शक्नुवन्तिFileChannel
तथाSocketChannel
मध्ये संक्रमितम्ByteBuffer
मध्यस्थत्वेन । अस्य अर्थः अस्ति यत् उपयोक्तृस्थानस्य कर्नलस्थानस्य च मध्ये प्रतिलिपिं न कृत्वा प्रत्यक्षतया डिस्कतः संजाले अथवा तद्विपरीतम् दत्तांशं स्थानान्तरयितुं शक्यते ।ByteBuffer
इत्यस्यwrap()
प्रक्रिया:wrap()
method इत्यनेन विद्यमानं बाइट्-सरण्यं वा अन्यं बफरं वा a मध्ये वेष्टयितुं शक्यतेByteBuffer
, अतः नूतनबफरमध्ये दत्तांशस्य प्रतिलिपिं कर्तुं आवश्यकता नास्ति । एतत् दत्तांशस्य अनावश्यकप्रतिलिपिं परिहरितुं उपयोगी भवति ।ByteBuffer
इत्यस्यslice()
प्रक्रिया:slice()
method इत्यनेन अन्तर्निहितदत्तांशस्य प्रतिलिपिं विना बफरस्य दृश्यं निर्माति ।बृहत् इति भावःByteBuffer
दत्तांशस्य प्रतिलिपिं विना बहुषु लघुबफरेषु विभक्तम् ।FileChannel इत्यनेन सह ByteBuffer इत्यस्य उपयोगं कुर्वन्तु:
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
public class ZeroCopyExample {
public static void main(String[] args) {
Path path = Path.of("example.txt");
try (FileChannel fileChannel = FileChannel.open(path, StandardOpenOption.READ)) {
ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
long transferred = fileChannel.transferTo(0, fileChannel.size(), System.out);
System.out.println("Transferred bytes: " + transferred);
} catch (IOException e) {
e.printStackTrace();
}
}
}
सूचना:
अस्माभिः ज्ञातव्यं यत् वस्तुतः अत्र उल्लिखिता शून्यप्रतिलिपिः केवलं अस्माकं अनुप्रयोगाय एव अस्ति, यस्य उपयोक्तृस्तरीयप्रतिलिपिः नास्ति । परन्तु उपयोक्तृस्तरस्य अपि प्रतिलिपिक्रियाः सर्वथा न भवितुं शक्यन्ते, परन्तु यथासम्भवं प्रतिलिपिनां न्यूनीकरणं कर्तुं शक्यते अतः वयं अवगन्तुं शक्नुमः यत् शून्यप्रतिलिपिः इति पदं वस्तुतः दत्तांशप्रतिलिपिसङ्ख्यां न्यूनीकर्तुं प्रौद्योगिक्याः उल्लेखं करोति । न च सत्या प्रतिलिपिक्रिया नास्ति इति भावः ।