Jak napisać wiele serializowalnych obiektów do jednego pliku, a następnie odczytywać kilka obiektów w razie potrzeby?pisanie wielu obiektów java do pojedynczego pliku
Odpowiedz
Sam musisz zaimplementować indeksowanie, ale w przeciwnym razie można to zrobić. Podczas serializacji obiektu zasadniczo odzyskujesz numer OutputStream
, który można wskazać w dowolnym miejscu. Przechowywanie wielu obiektów w pliku w ten sposób byłoby proste.
Trudna część pojawia się, gdy chcesz odczytać "kilka" obiektów z powrotem. Jak chcesz wiedzieć, jak szukać pozycji w pliku, który zawiera konkretny obiekt, który chcesz? Jeśli zawsze czytasz obiekty z powrotem w takiej samej kolejności, w jakiej je zapisałeś, od początku pliku nie będzie to problemem. Ale jeśli chcesz mieć losowy dostęp do obiektów w "środku" strumienia, będziesz musiał wymyślić jakiś sposób określenia przesunięcia bajtowego konkretnego obiektu, który cię interesuje.
(Ta metoda nie ma nic wspólnego z synchronizacją lub nawet Java jako taką, musisz zaprojektować schemat, który będzie pasował do twoich wymagań i środowiska.)
Tak na przykład. Piszę "1", "2", "3", "4". Czy musiałbym je czytać jako "4", "3", "2", "1"? Nie ma sensu ponownie czytać ich w "1", "2", "3", "4". Czy mógłbyś wyjaśnić? –
Pismo jest łatwe. Musisz tylko pamiętać, że musisz pisać wszystkie obiekty "naraz". Nie można utworzyć pliku z serializowanymi obiektami, zamknąć go i ponownie otworzyć, aby dołączyć więcej obiektów. Jeśli spróbujesz, otrzymasz komunikat o błędzie podczas czytania.
Do deserializacji, myślę, że musisz przetworzyć cały plik i zatrzymać obiekty, które cię interesują. Pozostałe zostaną utworzone, ale zebrane przez gc przy następnej okazji.
Użyłbym Flat File Database (np. Berkeley DB Java Edition). Wystarczy napisać swoje węzły jako wiersze w tabeli jak:
Node
----
id
value
parent_id
Bądź Object[]
do przechowywania przedmiotów. To zadziałało dla mnie.
- 1. Pisanie Java do usuniętego pliku
- 2. Deserializacji wielu obiektów Java
- 3. SharpZipLib: Kompresowanie pojedynczego pliku do pojedynczego skompresowanego pliku
- 4. eksportowanie wielu tabel dostępu do pojedynczego XML
- 5. Pisanie do istniejącego pliku Excel
- 6. python, pisanie Json do pliku
- 7. Pisanie do już istniejącego pliku przy użyciu FileWriter Java
- 8. pisanie do programu Excel w języku Java
- 9. Pisanie ogromnych porcji danych do obiektów NSData - iOS
- 10. pisanie serwera ftp java
- 11. Czytanie pojedynczego pliku z wielu wątków w pythonie
- 12. Przetwarzanie pojedynczego pliku z wielu procesów w pythonie
- 13. jQuery FileUploadUI Przesyłanie pojedynczego pliku
- 14. NSMutableDictionary Dodawanie wielu obiektów do jednego klucza
- 15. JsonCpp Pisanie z powrotem do pliku Json
- 16. Pisanie tabel w latarce do pliku
- 17. Jak zaprojektować obiekty warstwy domeny do reprezentowania wielu obiektów i pojedynczego obiektu w Zend Framework?
- 18. Konwersja pojedynczego pliku aspx do kodu za
- 19. Dołączanie pojedynczego pliku do wiadomości e-mail
- 20. Serializacja i Deserializacja wielu obiektów
- 21. Pisanie XML w Java FileNotFoundException
- 22. Java cipher.doFinal() pisanie dodatkowych bajtów
- 23. Czytanie i pisanie int do pliku binarnego w języku C++
- 24. Przekazuje selektor do wielu obiektów w Swift
- 25. Tworzenie wielu obiektów w Django administratora naraz
- 26. Symfony2 Dostęp ACL do wielu obiektów dla wielu użytkowników
- 27. Pisanie pliku Excel w EPPlus
- 28. Pisanie plików Java Losowo zatrzymuje się?
- 29. pojedynczego logowania shibboleth na serwerze aplikacji java
- 30. format-poprawka dla pojedynczego pliku
Cały problem: Muszę zaimplementować drzewo B. Chciałbym utworzyć obiekt dla każdego "węzła" i zapisać go w pliku. Teraz, gdy korzystam z drzewa b później, chciałbym uzyskać root i odczytać tylko pożądane węzły. – Anupam
Nie powiedziałeś, dlaczego to zrobiłeś. Powodem, dla którego pytam, jest to, że możesz błędnie założyć, że jest to w jakiś sposób szybsze lub bardziej efektywne, gdy jest bardziej prawdopodobne, że po prostu niepotrzebnie się komplikuje. Jeśli masz kilka 100 MB danych, może się to opłacać, inaczej po prostu odczytaj całą strukturę w pamięci i uzyskaj dostęp do niej. –