Java: riesige Datei verändern

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
  • Hey com,


    ich leide seid ein paar Tagen unter einem Problem, das ich nicht gelöst bekomme -_-


    Angenommen, ich habe eine Datei (~500 GB groß), die, logischerweise, aus vielen Bytes besteht. Ich muss in dieser Datei jetzt folgendes machen:
    - an Stelle 65535 etwas einfügen, sodass der Rest nach hinten verschoben wird ( 65535 wird 65536, 65536 wird 65537, ... )
    - zwischen Stelle 99995 und 100000 ein paar Zeichen löschen, sodass alles ab da x Positionen nach vorne rutscht


    Ideen und daraus passierende Probleme:
    - die Datei auslesen, Zeichen ersetzen, wieder schreiben => RAM voll, SWAP voll
    - in eine neue Datei schreiben, währenddessen manipulieren, umbenennen => eventuell nicht genug freier Speicher


    Zu bestimmten Positionen kann ich schon springen (über die FileChannel), und auch ab da Zeichen lesen, aber nicht löschen/einfügen.


    Anyone, pls help - währe wirklich nice :/


    Tion

  • Hey,


    danke für die Antwort.


    So wie ich das verstanden habe, ist das dafür da, eine Datei zu simulieren, aber in Warheit auf das Dateisystem zugreifen zu wollen? :wacko:
    Ich glaube, dann habe ich mich etwas inkorrekt ausgedrückt.


    Ich habe eine Datei, die etwa so aussieht:

    Zitat

    qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq


    Per Code möchte ich ein paar Bytes löschen, also folgendes:

    Zitat

    qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq


    Und ich möchte ein paar neue einfügen:

    Zitat

    qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqwwwwwwwwwwqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq


    Ich brauche also einen Stream, bei dem ich einzelnde Bytes entfernen oder einfügen kann. Dabei habe ich 3 Kriterien:

    • Es darf nicht die komplette Datei in den RAM geladen werden
    • Es darf keine neue Datei angelegt werden
    • Es muss "schnell" gehen (sagen wir... 20 Schreibeoperationen pro Sekunde, ungefähr)


    Edit: Okay, hat sich erledigt. Habe deine Seite noch mal genauer auseinander gelegt und bin dabei auf "RandomAccessFile" gestoßen, dass die Bytes zu überschreiben scheint. Vielen Dank dafür, bekommst beste Antwort :love: