Wie kann ich effektiv aus einer großen Datei lesen und Massendaten in eine Datei schreiben mit dem Java NIO
Framework.Lesen und Schreiben einer großen Datei mit Java NIO
Ich arbeite mit ByteBuffer
und FileChannel
und hatte sich wie unten etwas versucht:
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();
}
}
Kann jemand sagen, ich sollte das gleiche Verfahren, wenn meine Dateigröße in mehr als 2 GB folgen?
Was sollte ich tun, wenn die gleichen Dinge, die ich beim Schreiben tun möchte, wenn geschriebene Operationen in großen Mengen sind?
Sind Sie versuchen, die Daten zwischendurch, oder wollen Sie einfach nur kopieren zu verarbeiten? – Kayaman
Was bedeutet "wenn die gleichen Dinge, die ich machen möchte"? – EJP