Beim Kopieren von spärlichen Dateien mit io.Copy() werden sie oft größer Die Größe nimmt am Ziel dramatisch zu.
io.Copy() überträgt Rohbytes, was das Vorhandensein von Lücken in einer Sparse-Datei maskiert – die Bereiche, in denen keine Daten vorhanden sind tatsächlich wohnt. Auf diese Informationen kann nicht über Standard-Systemaufrufe wie read(2) zugegriffen werden. Daher ist io.Copy() nicht in der Lage, die Spärlichkeit von Dateien beizubehalten.
Um dieses Problem zu lösen, müssen wir mithilfe des Syscall-Pakets und der manuellen Handhabung tiefer eintauchen. Lseek(2)-Systemaufrufe mit speziellen SEEK_HOLE- und SEEK_DATA-Werten können verwendet werden, um Lücken in Dateien zu manipulieren.
Wenn Sie die spärliche Dichte einer Datei während der Übertragung beibehalten möchten, ist die Situation komplizierter. Fallocate(2) kann verwendet werden, um die Erstellung von Lücken in unterstützten Dateisystemen zu versuchen. Allerdings fehlt einigen Dateisystemen von Natur aus die Lückenunterstützung, wie etwa die FAT-Familie.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3