Java: riesige Datei verändern

  • 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: