Java Serialization

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Java Serialization

Post by Luke » Tue Dec 30, 2008 12:03 am

Υπάρχει τρόπος να συνδυάσω serialization αντικειμένων με UDP sockets; Δηλαδή θέλω να μεταφέρω μέσω UDP σειριακοποιημένα αντικείμενα, γίνεται;
Γενικά ξέρω ότι το serialization συνδέεται άμεσα με streaming, δηλαδή TCP, αλλά μήπως υπάρχει κάποιος έμμεσος τρόπος να το καταφέρω; Θέλω να συνδυάσω τα πλεονεκτήματα και των δύο σε ένα, αν είναι δυνατόν. :)
Είμαι ένας μοναχικός cowboy...
User avatar
netharis
Venus Former Team Member
Posts: 1845
Joined: Sun Jul 15, 2007 2:37 pm
Academic status: Alumnus/a
Gender:
Location: Seattle, Washington
Contact:

Re: Java Serialization

Post by netharis » Tue Dec 30, 2008 1:57 am

Αν κατάλαβα καλά τι θες να κάνεις, δεν πρέπει να είναι κάτι δύσκολο προγραμματιστικά.
Θα πρέπει να φτιάξεις το serialization στη μνήμη/αρχείο με κάποιο ByteOutputStream και στη συνέχεια μέσω του ObjectOutputStream, να τραβήξεις ένα byte array απο εκεί και να το στείλεις ως DatagramPacket.
Στο receive μέρος θα κάνεις κάτι αντίστοιχο με τα bytes που διάβασες απο το πακέτο, χρησιμοποιώντας ObjectInputStream και ByteInputStream.
Δεν εχω ασχοληθεί πολύ με UDP σε java, αλλά θα πρέπει λογικά να φτιάξεις κάποιο header, και να ελέγχεις τα πακέτα.
Πάντως αυτό που θες να κάνεις νομίζω γίνεται και με RMI.
Image
Resistance is futile. Join the foss-side now!
"UNIX is very simple, it just needs a genius to understand its simplicity." - Dennis Ritchie
"The things that I want, by Max Payne. A smoke. A whiskey. For the sun to shine. I want to sleep, to forget. To change the past. Unlimited ammo and a license to kill. But right then, more than anything, I wanted her."
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Re: Java Serialization

Post by Luke » Tue Dec 30, 2008 3:33 pm

Ψάχνοντας το λίγο παραπάνω και μετά και από το post σου κατέληξα στο συμπέρασμα ότι μάλλον δε γίνεται αυτό που θέλω ή και να γίνεται είναι εντελώς ανούσιο γιατί ακριβώς το ίδιο πράγμα μπορεί να επιτευχθεί με πιο απλό τρόπο. Απλά ήθελα αν ήταν δυνατό να διαχειρίζομαι με αντικειμενοστρέφεια το πακέτο-μήνυμα που στέλνεται από έναν client σε ένα server.
netharis wrote: Θα πρέπει να φτιάξεις το serialization στη μνήμη/αρχείο με κάποιο ByteOutputStream
Το πιο κοντινό που βρήκα στη java είναι η κλάση ByteArrayOutputStream. Λογικά σε αυτό αναφέρεσαι.
netharis wrote: και στη συνέχεια μέσω του ObjectOutputStream, να τραβήξεις ένα byte array απο εκεί και να το στείλεις ως DatagramPacket.
Απ' ό,τι φαίνεται δεν υπάρχει μέθοδος που να το κάνει αυτό αλλά έτσι κι αλλιώς και να γινόταν αυτός ο τρόπος "καταργεί" το serialization αφού δεν περνάει ως "αντικείμενο" μέσα από το socket αλλά ως bytes (εκτός κι αν δεν κατάλαβα κάτι καλά). Δηλαδή τελικά για να περάσει ένα byte[] απέναντι είναι ευκολότερο να κατασκευάσω ένα String, να το μετατρέψω σε bytes και να το στείλω απέναντι. Βέβαια αυτό είναι περιορισμός καθαρά UDP τώρα που το βλέπω αφού απαιτεί το packet να περιέχει οπωσδήποτε ένα byte[] ως δεδομένα.
netharis wrote: Πάντως αυτό που θες να κάνεις νομίζω γίνεται και με RMI.
Μπα, δε θέλω να χρησιμοποιήσω RMI. :)

Ευχαριστώ πάντως για την απάντηση. :smt023
Είμαι ένας μοναχικός cowboy...
User avatar
rigo
Gbyte level
Gbyte level
Posts: 1160
Joined: Wed Nov 02, 2005 10:54 am
Academic status: Alumnus/a
Gender:
Location: Amsterdam

Re: Java Serialization

Post by rigo » Tue Dec 30, 2008 4:53 pm

^^ Εσύ το έχεις πάει πολύ μακριά, αρχίζω να νιώθω άσχημα!! :lol:
"Αλλού κοιμάται το κορμί, και αλλού η ψυχή ξυπνάει"
User avatar
netharis
Venus Former Team Member
Posts: 1845
Joined: Sun Jul 15, 2007 2:37 pm
Academic status: Alumnus/a
Gender:
Location: Seattle, Washington
Contact:

Re: Java Serialization

Post by netharis » Tue Dec 30, 2008 4:54 pm

Έτσι και αλλιώς ως bytes θα μεταφερθεί το αντικείμενο σου.
Σίγουρα μπορείς να φτιάξεις μία class για να "στέλνει" ένα αντικείμενο μέσω UDP όπως είπαμε.
Αυτό με δεδομένο το οτι χρησιμοποιείς την DatagramSocket.
Θα μπορείς να φτιάξεις ένα custom implementation του UDP, αλλά δεν νομίζω πως η Java είναι η κατάλληλη γλώσσα για κάτι τέτοιο.

Καλή επιτυχία ότι και να κάνεις :)
Image
Resistance is futile. Join the foss-side now!
"UNIX is very simple, it just needs a genius to understand its simplicity." - Dennis Ritchie
"The things that I want, by Max Payne. A smoke. A whiskey. For the sun to shine. I want to sleep, to forget. To change the past. Unlimited ammo and a license to kill. But right then, more than anything, I wanted her."
User avatar
Luke
Gbyte level
Gbyte level
Posts: 1388
Joined: Wed Aug 09, 2006 11:19 am
Academic status: Alumnus/a
Gender:

Re: Java Serialization

Post by Luke » Tue Dec 30, 2008 6:26 pm

netharis wrote:Έτσι και αλλιώς ως bytes θα μεταφερθεί το αντικείμενο σου.
Σωστό κι αυτό, αλλά για να κάνεις τις μετατροπές από object σε bytes και το αντίστροφο μάλλον δεν στέκει και πολύ σαν λογική και μάλλον χρειάζεται μια custom υλοποίηση για να πάρεις από το serialozed object bytes. Οπότε στην τελική μάλλον δυσκολεύει αντί να διευκολύνει το έργο αυτή η λογική. Από την αρχή "έμπαζε" λίγο αυτό που ήθελα να κάνω. :)
rigo wrote:^^ Εσύ το έχεις πάει πολύ μακριά, αρχίζω να νιώθω άσχημα!! :lol:
Δεν είναι κάτι τρομερό. Απλά ήθελα με κάποιο τρόπο να φτιάξω τα δικά μου μηνύματα (και να μην στέλνω ένα απλό String μέσω του socket) ώστε να τα διαχειρίζεται ευκολότερα ο παραλήπτης, αποφεύγοντας παράλληλα να χρησιμοποιήσω tcp sockets γιατί μπορεί να υπάρχει συμφόρηση και καθυστέρηση στο δίκτυο με τις πολλές συνδέσεις.
Μην βλέπεις τον τίτλο και τρομάζεις. :lol:
Είμαι ένας μοναχικός cowboy...
User avatar
tsilochr
Wow! Terabyte level
Wow! Terabyte level
Posts: 3246
Joined: Tue Mar 16, 2004 2:47 pm
Academic status: PhD
Gender:
Location: mm.aueb.gr
Contact:

Re: Java Serialization

Post by tsilochr » Wed Dec 31, 2008 2:22 am

Luke, προσπαθώντας να κάνεις πιο "συμμαζεμένο" το κώδικα σου, είτε με java serialization είτε με udp wrappers (ή ό,τι άλλο πας να φτιάξεις), κινείσαι προς το RPC. Δεν ξέρω πόσο θες να επεκταθείς αλλά πηγαίνοντας προς αυτή την κατεύθυνση θα κουτουλήσεις στο RMI και (μιας και αυτή τη περίοδο είναι στα πάνω τους) στα XML Web Services. Μήπως να αφιέρωνες λίγο χαζεύοντας σε αυτές τις τεχνολογίες; Δεν είναι χαμένος κόπος
Post Reply

Return to “Προγραμματισμός”