Avatar billede dennism Nybegynder
26. marts 2009 - 00:02 Der er 9 kommentarer og
1 løsning

Java: String array

Jeg har følgende kode:

ArrayList<Long> array = ...
String request = array.toString();

Jeg har altså et Array af longs, som jeg på et tidspunkt har smidt i en string, fordi jeg har haft brug for at sende det over netværket.

Nu vil jeg så gerne have denne string tilbage til et Long-array. Hvordan går jeg det på den smarteste måde?
Avatar billede mxs Nybegynder
26. marts 2009 - 00:48 #1
Hvordan ser din String ud efter at den er blevet smidt over netværket? Jeg ved at String har en "toCharArray"-metode eller noget i den stil. Men man kunne lave noget kode som løb strengen igennem og addede det hele til en List.
Avatar billede arne_v Ekspert
26. marts 2009 - 00:50 #2
Jeg tror ikke at der er nogen geneial løsning på det stillede problem:

Men følgende virker:

import java.util.ArrayList;
import java.util.List;

public class L2S2L {
    public static void main(String[] args) {
        List<Long> before = new ArrayList<Long>();
        before.add(1L);
        before.add(2L);
        before.add(3L);
        System.out.println(before);
        String str = before.toString();
        System.out.println(str);
        List<Long> after = new ArrayList<Long>();
        for(String part : str.split("\\D+")) {
            if(part.length() > 0) {
                after.add(Long.parseLong(part));
            }
        }
        System.out.println(after);
    }
}
Avatar billede arne_v Ekspert
26. marts 2009 - 00:52 #3
Men der er andre og bedre måder at serialisere en List<Long> på som ville undgå problemet !
Avatar billede dennism Nybegynder
26. marts 2009 - 08:06 #4
Hvordan foreslår du så, at jeg serialiserer min List<Long>?
Avatar billede arne_v Ekspert
26. marts 2009 - 14:47 #5
Jeg ville gaa efter en af den mange muligheder for at serialisere til XML.
Avatar billede dennism Nybegynder
26. marts 2009 - 16:03 #6
Vi vil helst have, at den response vi sender over netværket, er så lille som mulig. Derfor vil vi helst ikke bruge XML. Men vi overvejer at decode vores Longs til hex inden vi sender dem over - tror du det vil betyde alverden? Vi bruger Java sockets over et privat hjemmenetværk.
Avatar billede arne_v Ekspert
27. marts 2009 - 01:05 #7
Hvis det kører på LAN så skal I flytte enormt store data mængder for at XML overheaden betyder noget.

Lad os sige at vi har 100000 longs.

De fylder:

binært - 800 KB
text - f.eks. 1200 KB
XML - f.eks. 4800 KB

På et 100 Mbit netværk tager det ca:

0.08 sekund
0.12 sekund
0.48 sekund

Og betyder den forskel noget ?
Avatar billede arne_v Ekspert
27. marts 2009 - 01:08 #8
Jeg kan ikke se pointen i hex.

traditionel decimal uden leading zeroes - 1-19 tegn (gennemsnitligt 10 tegn)
decimal med leading zeroes - 19 tegn
traditionel hex med leading zeroes - 16 tegn
hex uden leading zeroes - 1-16 tegn (gennemsnitligt 8.5 tegn)
Avatar billede dennism Nybegynder
09. juni 2009 - 10:53 #9
Vil du smide et svar, arne_v?
Avatar billede arne_v Ekspert
09. juni 2009 - 14:47 #10
svar
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