Szukam skutecznego sposobu na utworzenie pliku, którego rozmiar jest nieznany, ale może wahać się od mb do gb i wypełniać zawartość losowo. Mogę napisać pierwsze 200 bajtów niż przeskoczyć do końca i napisać ostatnie 200 bajtów i przejść do środka i tam napisać. Czy w tym celu jest wydajne RandomAccessFile
, czy są jakieś alternatywy, które są lepiej dostosowane do tego rodzaju pracy?Dostęp Java do dużego pliku
Odpowiedz
Tak, użyj RandomAccessFile
- po to tam jest. Możesz może potencjalnie używać FileChannel
, ale najpierw wybrać RandomAccessFile
- prawdopodobnie będzie prostsze.
Należy pamiętać, że po napisaniu części końcowej nie będzie można "wstawić w środku" pliku: nie znam żadnego systemu plików, który to obsługuje. Zanim napiszesz końcową część, musisz znać pełny rozmiar. Alternatywą byłoby pisać sekwencyjnie, pamiętając końcowy bit do końca.
Jeśli możesz podać nam więcej informacji o tym, co musisz zrobić (i kiedy masz informacje na temat rozmiaru), możemy być w stanie Ci pomóc.
EDIT: Aby utworzyć plik o określonej wielkości, można seek()
poza końcem, a następnie zapisywać dane:
import java.io.*;
public class Test
{
// Just for the sake of a simple test program!
public static void main(String[] args) throws Exception
{
RandomAccessFile file = new RandomAccessFile("file.dat", "rw");
file.seek(100);
file.write(0);
file.close();
}
}
po tym odszedł, file.dat
będzie długo 101 bajtów. (Zauważ, że normalnie użyłbyś polecenia try/finally itp.)
EDYCJA: Jak coobird wspomniany w komentarzach, setLength()
również rozszerzy plik - ale spowoduje to również skrócenie pliku, jeśli podasz długość mniejszą niż bieżący rozmiar. Biorąc pod uwagę twój komentarz na temat pisania danych torrentowych, podejrzewam, że poszukiwanie i pisanie jest dokładnie tym, czego pragniesz. Kiedy otrzymasz kawałek, po prostu szukaj w odpowiednim miejscu, zapisz go, a plik rozszerzy się, gdy zajdzie taka potrzeba.
Chyba RandomAccessFile jest w porządku dla tego problemu
RandomAccessFile powinien to zrobić
- 1. struktura danych do indeksowania dużego pliku
- 2. powershell Uzyskaj liczbę linii dużego (dużego) pliku
- 3. Parsowanie dużego pliku JSON
- 4. Chunking danych z dużego pliku do wieloprocesowości?
- 5. Wystąpienie błędu Java OutOfMemoryError podczas czytania dużego pliku tekstowego
- 6. Szyfrowanie dużego pliku za pomocą AES przy użyciu JAVA
- 7. Dostęp do pliku wewnątrz .jar
- 8. Oracle: ładowanie dużego pliku xml?
- 9. Nginx serwowania statycznych dużego pliku
- 10. C# wyszukiwanie dużego pliku tekstowego
- 11. Pobieranie dużego pliku - iPhone SDK
- 12. Java, nashorn uzyskując dostęp do innego pliku js
- 13. Dostęp do macierzystego pliku Rhino JSON.Stringify z Java
- 14. Programowy dostęp do dokumentacji Java
- 15. Dostęp do scala.None z Java
- 16. Dostęp do Config.groovy z klasy Java
- 17. tworzenie dużego pliku xml w rubinach
- 18. Importowanie dużego pliku sql (> 20 GB)
- 19. Szybko zamień pierwszą linię dużego pliku
- 20. Importowanie dużego pliku CSV przy użyciu phpMyAdmin
- 21. Dane POST znikają przy przesyłaniu dużego pliku
- 22. Python: cięcie bardzo dużego pliku binarnego
- 23. Jak skutecznie wydaj linek do dużego pliku w Powershell
- 24. Kłopoty z PostgreSQL ładowaniem dużego pliku CSV do tabeli
- 25. Konwersja dużego pliku XLSX do CSV bez użycia phpExcel
- 26. błąd Push git powodu nieistniejącej dużego pliku
- 27. Jak odczytywać określone wiersze dużego pliku csv
- 28. Otwieranie dużego pliku JSON w Pythonie
- 29. InstallShield nie tworzy jednego dużego pliku konfiguracyjnego
- 30. Zmniejszenie wydajności zapisu dużego pliku binarnego
Czy istnieje sposób, aby utworzyć plik z góry zadanym rozmiarze innym niż iteracji i pisania wszystkie zera lub jednego, aby ją wypełnić? –
Edytowanie w celu odzwierciedlenia tego. –
Dzięki, dlatego, że muszę zapisywać losowe części w pliku, wdrażam klienta torrenta, a elementy pojawią się w losowych lokalizacjach w pliku, ale wiem wcześniej, jaki będzie rozmiar całego pliku. –