Posiadam hashmape gdzie kluczem jest data, a wartoscia ArrayLista obiektów DefaultTableModel. Z zalozenia nie znam kluczy (tzn. zbyt dlugie byloby przeszukiwanie kluczy np. od 1990 roku do 2011), wystepuja tylko te obiekty które mają dodany model/modele do ArrayListy. Przy serializacji hashmapy w zasadzie wszystko przechodzi pomyślnie, jednak rozmiar pojedynczego modelu Jtable wychodzi 3-30KB co jest jednak nie do zaakceptowania, gdyz z zalozenia bedzie tam >3000 modeli. Najprosciej byloby serializowac obiekt uzyskany z DefaultTableModel metoda getModel(), jednak w jaki sposob to zrobic? Skoro nie wiem co jest w hashmapie nie moge wyciagnac kazdego modelu poprzez getModel(), musze serializowac cale DefaultTableModel. Lub jak serializowac DefaultTableModel bez wszystkich dodatkow typu rendererów itp. (najlepiej sam model)? Wiem, że od tego jest transient jednak tutaj nie ma go gdzie chyba zastosować.
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 13 lat
- Postów:9
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 13 lat
- Postów:9
Chodziło o metodę getData().
Wygląda to tak:
mam hashmapę: HashMap<Integer, MyList>
Integer to daty np. 19072011
MyList to klasa zawierajaca: ArrayList<SingleTable> myList;
Klasa SingleTable rozszerza DefaultTableModel
Serializując całą hashmapę w pliku jest pełno śmieci np:
ignoreSortChangeZ isRowHeightSetI rowHeightI rowMarginZ rowSelectionAdjustingZ rowSelectionAllowedZ showHorizontalLinesZ showVerticalLinesZ
sorterChangedZ surrendersFocusOnKeystrokeZ updateSelectionOnSortL columnModelt $Ljavax/swing/table/TableColumnModel;L dataModelt Ljavax/swing/table/TableModel;L dropModet Ljavax/swing/DropMode;L
editorRemovert #Ljava/beans/PropertyChangeListener;L gridColort Ljava/awt/Color;L preferredViewportSizet Ljava/awt/Dimension;L
printErrort Ljava/lang/Throwable;L rowModelt Ljavax/swing/SizeSequence;L selectionBackgroundq ~ L selectionForegroundq
Problem polega na tym, że dat może być bardzo dużo np. 20 lat, co rowna sie sprawdzeniu 20*365 kluczy (wtedy jezeli odnaleziono MyList mozna wyciagnac modele). Chcialbym to jednak zrobic tak aby serializowal sie sam model, a obecnie serializuje sie jakby cala konfiguracja JTable. Do tego dochodzi problem serializacji przy jednoczesnej edycji wartosci w tabeli. Serializacja jest wykonywana przy zamykaniu programu, jednak jezeli edycja ktoregos pola nie zostala zakonczona rzucany jest wyjatek: "java.io.NotSerializableException: java.lang.reflect.Constructor" - (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6441373). Dlatego chce wyciagnac samą tablice data, jednak jak to zrobic bez przeszukiwania wszystkich kluczy?

- Rejestracja:prawie 15 lat
- Ostatnio:około 7 lat
Najlepiej i najwygodniej będzie imho napisanie w klasie SingleTable metod:
private void writeObject(ObjectOutputStream out) throws IOException;
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException;
W nich napisać dokładnie co ma być (de)serializowane.
http://java.sun.com/developer/technicalArticles/Programming/serialization/
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 13 lat
- Postów:9
Wielkie dzieki, poczytam zaraz i sprobuje, pewnie bedzie dzialalo tak jak chce.
W poszukiwaniu znalazlem tez ze HashMapa ma metodę keySet() dzięki której pewnie też bym osiągnął zamierzony cel (znałbym juz klucze bez zbednego przeszukiwania), jednak to co podałeś jest raczej strzałem w 10 ;-)

- Rejestracja:prawie 15 lat
- Ostatnio:około 7 lat
HashMap ma jeszcze metodę values, która zwraca kolekcję wszystkich wartości - nawet nie trzeba się odwoływać po kluczu. Ale napisanie własnych metod serializujących jest lepszym rozwiązaniem. Gdzie nie będziesz zapisywał będzie tylko jedna linijka kodu. I nie zależnie czy to będzie siedzieć w hashmapie, pojedynczym obiekcie czy whatever - będzie działać.