Hallo,
ich hab eine Datei und möchte per Filechannel etwas in die Mitte einfügen
Bisher sieht das so aus:
Also ich nimm die ursprüngliche Datei, mappe davon die erste und die zweite hälfte, eine map für den neuen teil und dann nacheinander rein damit und force().
Bei kleinen Dateien funktioniert das auch gut, aber wie ist das bei großen? da wird doch dann die gesamte Datei in die map geladen oder? Ist das nicht zu umständlich?
Da muss es sicher noch was geben mit dem ich eine Map direkt an eine Position einfügen kann, ohne das da was überschrieben wird, oder?
ich hab eine Datei und möchte per Filechannel etwas in die Mitte einfügen
Bisher sieht das so aus:
Code:
try{
RandomAccessFile raf = new RandomAccessFile(DATEI, "rw");
FileChannel fci = raf.getChannel();
MappedByteBuffer map1 = fci.map(FileChannel.MapMode.READ_ONLY, 0, raf.length()/2);
MappedByteBuffer map2 = fci.map(FileChannel.MapMode.READ_ONLY, raf.length()/2, raf.length()/2);
MappedByteBuffer map3 = fci.map(FileChannel.MapMode.READ_WRITE, 0, raf.length()+NEW_INHALT.length());
byte[] anfang = new byte[map1.capacity()];
byte[] neu = new byte[NEW_INHALT.length()];
neu = NEW_INHALT.getBytes();
byte[] ende = new byte[map2.capacity()];
map1.get(anfang);
map1.rewind();
map2.get(ende);
map2.rewind();
map3.put(anfang);
map3.put(neu);
map3.put(ende);
map3.force();
fci.close();
raf.close();
}catch(FileNotFoundException ex){
ex.printStackTrace();
}catch(IOException ex){
ex.printStackTrace();
}
Also ich nimm die ursprüngliche Datei, mappe davon die erste und die zweite hälfte, eine map für den neuen teil und dann nacheinander rein damit und force().
Bei kleinen Dateien funktioniert das auch gut, aber wie ist das bei großen? da wird doch dann die gesamte Datei in die map geladen oder? Ist das nicht zu umständlich?
Da muss es sicher noch was geben mit dem ich eine Map direkt an eine Position einfügen kann, ohne das da was überschrieben wird, oder?