Как я могу эффективно читать из большого файла и записывать объемные данные в файл с использованием рамки Java NIO
.Чтение и написание большого файла с использованием Java NIO
Я работаю с ByteBuffer
и FileChannel
и пытался что-то вроде ниже:
public static void main(String[] args)
{
String inFileStr = "screen.png";
String outFileStr = "screen-out.png";
long startTime, elapsedTime;
int bufferSizeKB = 4;
int bufferSize = bufferSizeKB * 1024;
// Check file length
File fileIn = new File(inFileStr);
System.out.println("File size is " + fileIn.length() + " bytes");
System.out.println("Buffer size is " + bufferSizeKB + " KB");
System.out.println("Using FileChannel with an indirect ByteBuffer of " + bufferSizeKB + " KB");
try ( FileChannel in = new FileInputStream(inFileStr).getChannel();
FileChannel out = new FileOutputStream(outFileStr).getChannel())
{
// Allocate an indirect ByteBuffer
ByteBuffer bytebuf = ByteBuffer.allocate(bufferSize);
startTime = System.nanoTime();
int bytesCount = 0;
// Read data from file into ByteBuffer
while ((bytesCount = in.read(bytebuf)) > 0) {
// flip the buffer which set the limit to current position, and position to 0.
bytebuf.flip();
out.write(bytebuf); // Write data from ByteBuffer to file
bytebuf.clear(); // For the next read
}
elapsedTime = System.nanoTime() - startTime;
System.out.println("Elapsed Time is " + (elapsedTime/1000000.0) + " msec");
}
catch (IOException ex) {
ex.printStackTrace();
}
}
Может кто-нибудь сказать, я должен следовать той же процедуре, если мой размер файла более чем 2 Гб?
Что я должен соблюдать, если аналогичные вещи я хочу делать во время записи, если письменные операции навалом?
Вы пытаетесь обработать данные между ними, или вы просто хотите, чтобы скопировать его? – Kayaman
Что означает «если подобные вещи, которые я хочу сделать»? – EJP