Avatar billede genvej Nybegynder
17. juli 2007 - 17:07 Der er 15 kommentarer og
1 løsning

Hashtable til byte[] og omvendt

Hej.

Jeg skal kommunikere en hashtable over noget netværk....

min kode ser sådan her ud

            //Write the data
            String data="test";
            OutputStream out = conn.getOutputStream();
            out.write(data.getBytes());
            out.close();
            InputStream ins =conn.getInputStream();


Nu vil jeg gerne erstatte min String data med en Hashtable... er der en finurlig måde jeg kan konvertere den til en byte[]??
Avatar billede arne_v Ekspert
17. juli 2007 - 17:12 #1
Hvis stoerrelsen af data ikke er et problem saa brug:

    private static byte[] serialize(Object o) throws IOException {
        ByteArrayOutputStream ba = new ByteArrayOutputStream(1000);
        ObjectOutputStream oba = new ObjectOutputStream(ba);
        oba.writeObject(o);
        return ba.toByteArray();
    }

    private static Object deserialize(byte[] b) throws IOException, ClassNotFoundException {
        ByteArrayInputStream ba = new ByteArrayInputStream(b);
        ObjectInputStream oba = new ObjectInputStream(ba);
        return oba.readObject();
    }
Avatar billede genvej Nybegynder
17. juli 2007 - 17:38 #2
Smukt igen igen arne!

However... størrelse kunne nu godt blive mig et problem men ByteArrayOutputStream vokser da dynamiskt så vidt jeg er orienteret?

smid et svar og få dine point
Avatar billede arne_v Ekspert
17. juli 2007 - 17:49 #3
svar
Avatar billede arne_v Ekspert
17. juli 2007 - 17:49 #4
ByteArrayOutputStream vokser dynamisk.

Men der er et overhead paa ca. 1000 bytes.
Avatar billede genvej Nybegynder
17. juli 2007 - 22:54 #5
må jeg høre dig hvad du mener når du spørger om størrelsen af data ikke er et problem?
Avatar billede arne_v Ekspert
17. juli 2007 - 22:56 #6
Jeg mener om du kan leve med lidt overhead (i faa KB stoerrelse), naar du sender data
over nettet.

Kan du det, saa er serialiseringen langt det nemmeste.

Kan du ikke, saa skal du igang med noget kompleks kode til at lave din
egen serialisering.
Avatar billede genvej Nybegynder
18. juli 2007 - 14:25 #7
shit.... din løsning går fint på server siden med java api med metoden serialize.

however... min klient side (som skal bruge deserialize) har ikke ObjectInputStream i sit api (RIM). Har sq godt nok siddet og kogt over et alternativ dog uden held, kender du et alternativ? på forånd mange tak!!
Avatar billede arne_v Ekspert
18. juli 2007 - 16:51 #8
Saa skal du bruge en mere manuel loesning i begge ender.

Hvis du hos sender:

bruger en DataOutputStream
itererer over Hashtable
  for hver name-value pair
    sender 2 strenge

Hvis du hos modtager:

aaben DataInputStream
opret Hashtable
while loekke saa laengde ikke EOF
  laes 2 strenge
  tilfoej til Hashtable
Avatar billede genvej Nybegynder
18. juli 2007 - 17:06 #9
nah...du ikke..

min hashtable består af en hashtable som består af en hastable som består af key(String) samt en vilkårlig type value
Avatar billede arne_v Ekspert
18. juli 2007 - 17:28 #10
Hvordan vil du serialisere en vilkaarlig type uden ObjectStream ?
Avatar billede arne_v Ekspert
18. juli 2007 - 17:28 #11
Du har ikke XMLEncode/XMLDecode ?
Avatar billede genvej Nybegynder
18. juli 2007 - 17:50 #12
serialieseringen var intet problem da dette gøres via standard jvm. på min server.

min klient (blackberry telefon) kører j2me/RIM libs og har begrænset api. og nej... jeg har ikke xmlencode/decode heller :-/

jeg skal overføre en database fra server til klient og havde tænkt mig at afspejle i en hashmap som beskrevet. Jeg er ikke sikker på den går grundet mit lille problem her....
Avatar billede arne_v Ekspert
18. juli 2007 - 17:52 #13
Hvordan vil du deserialisere en ...
Avatar billede genvej Nybegynder
18. juli 2007 - 18:00 #14
Det kunne jeg jo ha gjort med din metode

private static Object deserialize(byte[] b) throws IOException, ClassNotFoundException {
        ByteArrayInputStream ba = new ByteArrayInputStream(b);
        ObjectInputStream oba = new ObjectInputStream(ba);
        return oba.readObject();
    }

Men den går jo ikke da jeg manlger ObjectInputStream
Avatar billede arne_v Ekspert
18. juli 2007 - 18:20 #15
Jeg kender ingen andre metoder der kan tage en vilkaarlig type.
Avatar billede genvej Nybegynder
18. juli 2007 - 22:00 #16
ok...jeg takker rigtig mange gange for din hjælp! og er ved at koge noget rigtig grimt kode sammen... skal nok poste min løsning
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester