मुझे अपने जावा आईओ प्रदर्शन के साथ कुछ परेशानी हो रही है।जावा आईओ प्रदर्शन एक्सओआर 2 फाइलों के साथ
सबसे पहले, मैंने प्रदर्शन के बारे में यहां अपनी युक्तियां पढ़ी हैं, जिन्हें मैंने कार्यान्वित करने का प्रयास किया था।
छोटे फ़ाइलों के साथ(400MB तक), यह बहुत तेजी से है:
लेकिन यहाँ मेरी समस्या है। लेकिन जिन वास्तविक फाइलों के साथ मैं काम करूँगा वे लगभग 30 जीबी हैं। और इनके साथ, यह नरक की तरह धीमा हो जाता है।
यह क्या करता है: 2 फ़ाइलें लें, अनन्य करें या एक नई फ़ाइल लिखें।
बीटीडब्ल्यू: अंत में फ़ाइल कटौती के बारे में चिंता न करें। यह एक छोटी सी गलती को ठीक करने के लिए है जिसे मैंने अभी तक नहीं मिला है।
मुझे आशा है कि किसी के पास मेरे लिए एक टिप है। धन्यवाद।
सादर टीमो
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class main {
public static void main(String[] args) throws IOException {
final long start = System.currentTimeMillis();
// Init. FileChannel1
final File file1 = new File("/home/tmann/Downloads/test/1.zip");
final RandomAccessFile fis1 = new RandomAccessFile(file1, "rw");
final FileChannel ch1 = fis1.getChannel();
// Init. FileChannel2
final File file2 = new File("/home/tmann/Downloads/test/2.zip");
final RandomAccessFile fis2 = new RandomAccessFile(file2, "rw");
final FileChannel ch2 = fis2.getChannel();
// Init FileChannel3
final File file3 = new File("/home/tmann/Downloads/test/32.zip");
final RandomAccessFile fis3 = new RandomAccessFile(file3, "rw");
final FileChannel ch3 = fis3.getChannel();
// Init ByteBuffer1
final ByteBuffer bytebuffer1 = ByteBuffer.allocate(65536);
// Init ByteBuffer2
final ByteBuffer bytebuffer2 = ByteBuffer.allocate(65536);
// Init ByteBuffer3
final ByteBuffer bytebuffer3 = ByteBuffer.allocate(65536);
int byte1 = 0;
int byte2 = 0;
final byte[] array1 = bytebuffer1.array();
final byte[] array2 = bytebuffer2.array();
final byte[] array3 = bytebuffer3.array();
int count = 0;
while (byte1 != -1) {
byte1=ch1.read(bytebuffer1);
byte2=ch2.read(bytebuffer2);
while (count < byte1) {
array3[count] = (byte) (array1[count]^array2[count]);
count++;
}
bytebuffer3.put(array3);
bytebuffer1.flip();
bytebuffer2.flip();
bytebuffer3.flip();
while (bytebuffer3.hasRemaining()) {
ch3.write(bytebuffer3);
}
bytebuffer1.clear();
bytebuffer2.clear();
bytebuffer3.clear();
}
fis3.setLength(fis3.length()-59858);
final long endvar = System.currentTimeMillis();
System.out.println((500.0/((endvar - start)/1000f)) + "MB/s");
}
}
यदि आपके पास 64-बिट JVM है तो मैं मेमोरी मैप की गई फ़ाइलों का उपयोग करूंगा। यदि आप कर सकते हैं तो मैं एक बाइट के बजाय एक्सओआर भी लम्बा होगा (यह 8x तेज हो सकता है) –
एक्सओआर लम्बे समय में एक अच्छी गति लाए, धन्यवाद। :) – user1688035