Java Serializácia

Programovacie jazyky, rady, poradňa...
miso250593
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 11 júl 2008, 16:53
Kontaktovať používateľa:

Java Serializácia

Príspevok od používateľa miso250593 »

Ahojte,

Dá sa nejako v jave dosiahnuť to, že mam objekty rôznych tried, a chcem ich dávať do binárneho súboru (serializované) ale ja by som potreboval aby som mal k nim priamo prístup teda by som chcel použiť RandomAccessFile

ibaže neviem ako riešiť to posúvanie v tom súbore

v C++ existuje union, v jave by sa takéto niečo nedalo spraviť?

Ďakujem
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8222
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa harrison314 »

union je daco ine,

Co ti brani dat tie objekty do listu a ten serializovat?
Alebo si spravit datovu triedu, ktora bude mat getre a setre na tie tvoje objekty a tu serializovat
miso250593
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 11 júl 2008, 16:53
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa miso250593 »

lenže mne ide o to, aby som to celé nemusel naťahovať do pamäti, preto sa potrebujem v tom súbore nejako pohybovať
preto ma napadol ten union z C++, lebo tam keď som do pola chcel nahádzať rozdielne objekty, tak sa to pekne pomocou toho dalo
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8222
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa harrison314 »

napriklad mozes ukladat serializovane objekty do SqLite,
alebo cez memory stream, ulozit objekt do buffera s pevnou dlzkou a ten zapisat do suboru
miso250593
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 11 júl 2008, 16:53
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa miso250593 »

A ako sa v jave používajú tie memory streamy?
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8222
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa harrison314 »

tak isto ako ostatne streamy, len nezapisujes do suboru alebo TCP streamu, ale do bufferu (pole bytov)
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Java Serializácia

Príspevok od používateľa pcsiete »

A co je zle na seek() a mape na zaciatku suboru?
miso250593
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 11 júl 2008, 16:53
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa miso250593 »

nad tým som tiež uvažoval, ale je problém v tom, že ak budem chcieť tie dáta meniť, tak mi budú vznikať medzery, i keď pravdu povediac takto budem mať medzier ešte viac...

pouvažujem
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Java Serializácia

Príspevok od používateľa pcsiete »

S tou mapou mas dve moznosti: bud si urobis mapu malych jednotiek pamati (zalezi od priemernej velkosti objektu) a pouzijes FAT system. Druha moznost (asi elegantnejsia) je ulozit si do mapy na zaciatku suboru identifikator, adresu v subore a velkost. A nasledne pri vymazovani dat nastavit identifikator alebo adresu na nejaku nemozno hodnotu (napr 0, kedze na zaciatku suboru sa nachadza mapa). Potom ak by si chcel zapisat nove data, proste by si si zobral nejaku adresu a zistoval ci sa spolu s velkostou objekt zmesti do nejakej medzery, pripadne by si ho prilepil na uplny koniec.

//autoeditácia príspevku (12 Máj 2013, 16:37)
Tretia moznost je drzat si zasobnik/frontu (lepsie zasobnik) alebo nieco podobne a v nom mat ulozene informacie o medzerach. V pripade dynamicky rastuceho suboru je toto asi najlepsie riesenie.
miso250593
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 11 júl 2008, 16:53
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa miso250593 »

ďakujem, tak to bude asi najlepšie

ešte by ma zaujímalo či sa nedá nejako efektívnejšie ukladať tie objekty, lebo keď si spravím pole 100 stringov, a tie uložím do súboru (cez serializaciu) tak to má menšiu veľkosť ako táto moja štruktúra, a keď som pozeral ten .bin súbor, tak pri tom poli stringov som mal identifikáciu toho objektu (java.lang.String) len raz, ale v tej mojej implementácii keď serializujem a ukladám tam ten objekt tak to mám pri každom

s tým by sa dalo niečo spraviť alebo by to bolo až moc zložité?
lebo tak viem že si môžem spraviť vlastnú implementáciu serializácie ale to už je zbytočné
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Java Serializácia

Príspevok od používateľa pcsiete »

ešte by ma zaujímalo či sa nedá nejako efektívnejšie ukladať tie objekty, lebo keď si spravím pole 100 stringov, a tie uložím do súboru (cez serializaciu) tak to má menšiu veľkosť ako táto moja štruktúra, a keď som pozeral ten .bin súbor, tak pri tom poli stringov som mal identifikáciu toho objektu (java.lang.String) len raz, ale v tej mojej implementácii keď serializujem a ukladám tam ten objekt tak to mám pri každom
celkom nechapem. Co je tvoj pripad? Identifikacia sa vyskytuje len raz alebo stale? Ako to robi tvoja implementacia?
miso250593
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 11 júl 2008, 16:53
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa miso250593 »

nie, už mi to nerobí

len nastavil som si kapacitu na 1 000 000
a "prázdny" súbor má 15MB

4*1000000 + 8*1000000 = 16000000/1024/1024 ~ 15M

nebolo by možno lepšie riešiť tu mapu v druhom súbore?
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Java Serializácia

Príspevok od používateľa pcsiete »

Neviem o co sa snazis. Samotna mapa nepotrebuje mat fixnu dlzku, staci jej maly zaklad napr. 100 prvkov. Nasledne ak bude nutne urobit vacsiu mapu, na 99 prvok v arrayi das ukazovatel na pokracovanie, ktore muze byt ulozene kdekolvek dalej v subore (alebo v medzere). Takto to vsetko bude fungovat dynamicky. Ak to chces jednoduchsie, urob si bitovu mapu kde bude jeden bit jeden chunk. Ak chces, mam na to fungujuci kod v Ccku.
miso250593
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 11 júl 2008, 16:53
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa miso250593 »

no to bude problém, ja potrebujem kvázi priamy prístup k tým objektom, takže neviem si predstaviť keby som používal povedzme mapu o dĺžke 100 a chcel povedzme prvok z indexom 2000, kým by som sa k nemu dostal
neviem asi to nechám takto, malo by to stačiť
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: Java Serializácia

Príspevok od používateľa pcsiete »

Zakazdym by si jednoduchó vybral adresu na uplnom konci zoznamu a tak presiel stovku. Jednoducho by si nebral mapu ako nieco specialne, ale ako normalny array. Len praca by bola rozdielna.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8222
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa harrison314 »

Aj mna by zaujimal kontext tohto problemu.
miso250593
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 11 júl 2008, 16:53
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa miso250593 »

no ono je to skôr také cvičenie, ešte som s tým nerobil a chcel som si to nejako vyskúšať
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8222
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa harrison314 »

tak to si potom pre objekty vytvor vlastnu serializaciu,
inak, keby tento problem riesim ja pouzijem databazu
miso250593
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 11 júl 2008, 16:53
Kontaktovať používateľa:

Re: Java Serializácia

Príspevok od používateľa miso250593 »

jo do databázy sa to samozrejme dá dať

ďakujem za rady
Napísať odpoveď