gpt4 book ai didi

具有 2 个文件的 Java IO 性能 XOR

转载 作者:搜寻专家 更新时间:2023-10-31 20:29:45 32 4
gpt4 key购买 nike

我的 Java IO 性能有些问题。

首先,我在这里阅读了关于性能的提示,我尝试实现这些提示。

但这是我的问题:

对于小文件(最多 400MB),速度非常快。但是我将要处理的真实文件大约有 30 GB。有了这些,它就会变慢。

它的作用:获取 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");

}
}

最佳答案

为什么需要一个 RandomAccessFile 来顺序读取它?

您是否尝试过在 FileInputStream 上使用简单的 BufferedInputStream?

关于具有 2 个文件的 Java IO 性能 XOR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12525767/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com