/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Serialize String[][] => String
Fra : Niels Andersen


Dato : 17-12-02 11:09

Jeg har et todimentional array, som skal igennem noget, der kun kan klare
plaintext.
Planen var at bruge method overload, og lave en metode der tager arrayet som
parameter, og den skal så serialize, og kalde den "rigtige" funkion.

Jeg er kommet så langt, at jeg har konkluderet at toString() ikke er
løsningen. :)
Det ser ud til at jeg skal bruge noget ObjectOutput-agtigt, men hvordan?

public boolean foobar(String[][] array) {
String string = ???
return foobar(string);
}
public boolean foobar(String string) {
....

--
Mvh.

Niels Andersen
(la nels. anersyn.)

 
 
Michael Banzon (17-12-2002)
Kommentar
Fra : Michael Banzon


Dato : 17-12-02 11:50


"Niels Andersen" <niels-usenet@myplace.dk> skrev i en meddelelse
news:mICL9.2703$Hl6.268690@news010.worldonline.dk...
> Jeg har et todimentional array, som skal igennem noget, der kun kan klare
> plaintext.

Hvad skal du bruge din String til bagefter??

/ Michael



Niels Andersen (17-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 17-12-02 12:19

Michael Banzon wrote in <EhDL9.2721$Hl6.272035@news010.worldonline.dk>:
>> Jeg har et todimentional array, som skal igennem noget, der kun kan klare
>> plaintext.
> Hvad skal du bruge din String til bagefter??

Noget i stil med dette:

public boolean foobar(String string) {
URLConnection urlCon;
try {
URL url = new URL("http://eksempel.dk/java-sjov.php");
urlCon = url.openConnection();
urlCon.setDoOutput(true);
PrintWriter out = new PrintWriter(urlCon.getOutputStream());
out.print("data="+URLEncoder.encode(string, "iso-8859-1"));
out.close();

Data er i nogle tilfælle en almindelig string, i andre tilfælle er det et
2-dimentionalt array. Derfor valgte jeg konstruktionen med to ens metoder,
hvor den ene oversætter arrayet til en string, og derefter kalder den
anden.

--
Mvh.

Niels Andersen
(la nels. anersyn.)

BigFatLamer(DK) (17-12-2002)
Kommentar
Fra : BigFatLamer(DK)


Dato : 17-12-02 12:34

Niels Andersen wrote:
> Jeg har et todimentional array, som skal igennem noget, der kun kan klare
> plaintext.
> Planen var at bruge method overload, og lave en metode der tager arrayet som
> parameter, og den skal så serialize, og kalde den "rigtige" funkion.
>
> Jeg er kommet så langt, at jeg har konkluderet at toString() ikke er
> løsningen. :)
> Det ser ud til at jeg skal bruge noget ObjectOutput-agtigt, men hvordan?
>
> public boolean foobar(String[][] array) {
> String string = ???
> return foobar(string);
> }
> public boolean foobar(String string) {
> ...
>
Tricket er at du selv kan bestemme formatet, hvilket nok vil være smart
da du har Java på den ene side og PHP på den anden.

Et format kunne være f.eks:

Brug komma (,) som seperator imellem kolonne værdier og pipe (|) imelle
række værdier. Så kunne dit serialiseret array se sådan ud...

tekst1_række1,tekst2_række1,tekst3_række1|tekst1_række2,tekst2_række2,tekst3_række2|tekst1_række3,tekst2_række3,tekst3_række3|

Så kan du bruge en StringTokenizer eller en hurtigere en
<String>.indexOf( ... ) til "pille" værdierne ud af den tekst streng du
sender frem og tilbage over nettet. Du skal dog være opmærksom på følgende:

1) De tegn du bruger for at finde kolonner og rækker, må selvfølgelig
ikke være i teksten. Dem kan du eventuelt replace med et andet tegn.
2) Hvis du bruger HTTP GET skal du huske at URL encode inde du sender.
3) Hvis du skal overføre binær data virker dette eksempel ikke :(

Håber at det hjælper dig lidt videre..


--

Cheers, BigFatLamer(DK)


Niels Andersen (17-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 17-12-02 13:16

BigFatLamer(DK) wrote in <3dff0bcd$0$179$edfadb0f@dread13.news.tele.dk>:
> Tricket er at du selv kan bestemme formatet, hvilket nok vil være smart
> da du har Java på den ene side og PHP på den anden.

Jeg synes nu det ville være smartere at lade java'en serialize selv, så
sparer jeg halvdelen af arbejdet, nemlig java-siden. :)

Jeg er *næsten* overbevist om at jeg har set java serialize arrays, og at
det altså er noget den selv kan gøre.

Godt nok er java både sjovt og spændende, men derfor behøver man jo ikke at
opfinde den dybe tallerken. :)

> 1) De tegn du bruger for at finde kolonner og rækker, må selvfølgelig
> ikke være i teksten. Dem kan du eventuelt replace med et andet tegn.

Serializeren har sikkert en løsning på dette, fx. noget med at escape.
Ellers bliver der bare et andet tegn man ikke kan bruge.

> 2) Hvis du bruger HTTP GET skal du huske at URL encode inde du sender.

Det skal man sådan set også med POST, hvis det skal læses nemt. :)

> 3) Hvis du skal overføre binær data virker dette eksempel ikke :(

Binær data er ikke relevant i dette projekt. :)
Hmm... Jeg mener egentlig ikke der er noget problem i at urlencode binær
data, ud over at det fylder ad h...... til. Men jeg har egentlig aldrig
spekuleret over det før. :)
En anden ting er så, om String kan indeholde binær data, det har jeg ingen
ide om. Men det er også ligemeget nu. :)

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Thorbjoern Ravn Ande~ (17-12-2002)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 17-12-02 13:43

Niels Andersen <niels-usenet@myplace.dk> writes:

> Jeg er *næsten* overbevist om at jeg har set java serialize arrays, og at
> det altså er noget den selv kan gøre.

Mon ikke du tænker på den automatiske udrulning som "implements
java.io.Serializable" giver mulighed for på klasseniveau?

Det er nok ikke helt nemt at få til det du gerne vil.

Pak eventuelt din array ind i et objekt, og lav en passende
toString(). Det er nok nemmest at få i luften hurtigt.

> En anden ting er så, om String kan indeholde binær data, det har jeg ingen
> ide om. Men det er også ligemeget nu. :)

Den kan indeholde alle unicodetegn.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn

Niels Andersen (17-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 17-12-02 14:04

Thorbjoern Ravn Andersen wrote in <kkel8g95q7.fsf@mimer.null.dk>:
>> Jeg er *næsten* overbevist om at jeg har set java serialize arrays, og at
>> det altså er noget den selv kan gøre.
> Mon ikke du tænker på den automatiske udrulning som "implements
> java.io.Serializable" giver mulighed for på klasseniveau?

Øhm... Det vil jeg ikke udelukke.

> Det er nok ikke helt nemt at få til det du gerne vil.
>
> Pak eventuelt din array ind i et objekt, og lav en passende
> toString(). Det er nok nemmest at få i luften hurtigt.

Hmm... OK da, jeg laver noget selv, så. :)

Jeg tror vist jeg implementerer PHP's måde at gøre det på, så sparer jeg
stadig halvdelen af arbejdet.

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Niels Andersen (17-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 17-12-02 15:13

Niels Andersen wrote in <xgFL9.2802$Hl6.281401@news010.worldonline.dk>:
> Jeg tror vist jeg implementerer PHP's måde at gøre det på, så sparer jeg
> stadig halvdelen af arbejdet.

Jeg er gået i gang med en klasse ting php-specifikke ting. Jeg har lavet en
metode som tager en String[] og en anden til String[][]. Det er hvad jeg har
brug for nu. Lige bortset fra, at jeg også skal den anden vej.

Men typen på return-objectet tages jo ikke i betragtigt. Så kan man ikke
gøre fx. sådan her:

public static String[] unserialize(String string) {
....
}
public static String[][] unserialize(String string) {
....
}

Hvad gør man så? Giver metoderne forskellige navne? Man kunne også bare
returnere en Object, menøh... Det synes jeg ikke virker smart.

I får lige mit foreløbige resultat, måske kommer nogen med noget
konstruktivt kritik.


public class php4 {

public php4() {
}

public static String serialize(String[] string) {
StringBuffer serialized = new StringBuffer("");
serialized.append("a:"+string.length+":{");
for (int i = 0; i<string.length; i++) {
serialized.append("i:"+i+";s:"+string[i].length()+":\""+string[i]+"\";");
}
serialized.append("}");
return serialized.toString();
}

public static String serialize(String[][] string) {
StringBuffer serialized = new StringBuffer("");
serialized.append("a:"+string.length+":{");
for (int i = 0; i<string.length; i++) {
serialized.append("i:"+i+";"+serialize(string[i]));
}
serialized.append("}");
return serialized.toString();
}

public static String serialize(Object object) {
return "Not implemented";
}

public static Object unserialize(String string) {
return "Not implemented";
}

}

--
Mvh.

Niels Andersen

BigFatLamer(DK) (17-12-2002)
Kommentar
Fra : BigFatLamer(DK)


Dato : 17-12-02 16:12

Niels Andersen wrote:
> Niels Andersen wrote in <xgFL9.2802$Hl6.281401@news010.worldonline.dk>:
>
>>Jeg tror vist jeg implementerer PHP's måde at gøre det på, så sparer jeg
>>stadig halvdelen af arbejdet.
>
>
> Jeg er gået i gang med en klasse ting php-specifikke ting. Jeg har lavet en
> metode som tager en String[] og en anden til String[][]. Det er hvad jeg har
> brug for nu. Lige bortset fra, at jeg også skal den anden vej.
>
> Men typen på return-objectet tages jo ikke i betragtigt. Så kan man ikke
> gøre fx. sådan her:
>
> public static String[] unserialize(String string) {
> ...
> }
> public static String[][] unserialize(String string) {
> ...
> }
>
> Hvad gør man så? Giver metoderne forskellige navne? Man kunne også bare
> returnere en Object, menøh... Det synes jeg ikke virker smart.
>
> I får lige mit foreløbige resultat, måske kommer nogen med noget
> konstruktivt kritik.
>
>
> public class php4 {
>
> public php4() {
> }
>
> public static String serialize(String[] string) {
> StringBuffer serialized = new StringBuffer("");
> serialized.append("a:"+string.length+":{");
> for (int i = 0; i<string.length; i++) {
> serialized.append("i:"+i+";s:"+string[i].length()+":\""+string[i]+"\";");
> }
> serialized.append("}");
> return serialized.toString();
> }
>
> public static String serialize(String[][] string) {
> StringBuffer serialized = new StringBuffer("");
> serialized.append("a:"+string.length+":{");
> for (int i = 0; i<string.length; i++) {
> serialized.append("i:"+i+";"+serialize(string[i]));
> }
> serialized.append("}");
> return serialized.toString();
> }
>
> public static String serialize(Object object) {
> return "Not implemented";
> }
>
> public static Object unserialize(String string) {
> return "Not implemented";
> }
>
> }
>
Du kunne måske overveje at bruge ArrayList, Collection eller lave din
egen Collection klasse - det vil nok gøre det hele lidt nemmere.

Lige et andet spørgsmål, hvorfor er dine metoder static???

--

Cheers, BigFatLamer(DK)


Niels Andersen (17-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 17-12-02 17:46

BigFatLamer(DK) wrote in <3dff3ed8$0$142$edfadb0f@dread13.news.tele.dk>:
>> Men typen på return-objectet tages jo ikke i betragtigt. Så kan man ikke
>> gøre fx. sådan her:
>> public static String[] unserialize(String string) {
>> public static String[][] unserialize(String string) {
>> Hvad gør man så? Giver metoderne forskellige navne? Man kunne også bare
>> returnere en Object, menøh... Det synes jeg ikke virker smart.

> Du kunne måske overveje at bruge ArrayList, Collection eller lave din
> egen Collection klasse - det vil nok gøre det hele lidt nemmere.

Okay, det læser jeg på. :)

> Lige et andet spørgsmål, hvorfor er dine metoder static???

Ellers vil den anden klasse, som bruger denne klasse, ikke compile. Jeg har
ikke lige undersøgt om dette er den rigtige løsning. Jeg havde godt nok en
fornemmelse af at det ikke var det rigtige. Men det kan skyldes at jeg bare
gør noget uden at vide hvorfor det virker, det føles vel aldrig rigtigt.

Men det virker, så jeg ville vente med at kigge på det til senere.

Fejl under compilering:

minKlasse.java [239:1] non-static method serialize(java.lang.String[][])
cannot be referenced from a static context
doCommand("get", php4.serialize(array));
^

metoden der giver fejlen:

private void jButtonGetMouseClicked(java.awt.event.MouseEvent evt) {
try {
String[][] array = {
{"ET", "to", "tre", "fire"},
{"TO", "to", "tre", "fire"},
{"TRE", "to", "tre", "fire"},
{"FIRE", "to", "tre", "fire"}
};
doCommand("get", php4.serialize(array));
} catch (Exception e) {
System.err.println(e.getMessage());
}
}


--
Mvh.

Niels Andersen
(la nels. anersyn.)

Allan E (17-12-2002)
Kommentar
Fra : Allan E


Dato : 17-12-02 20:30

"Niels Andersen" <niels-usenet@myplace.dk> wrote in message
news:vwIL9.3218$Hl6.307003@news010.worldonline.dk...
> > Lige et andet spørgsmål, hvorfor er dine metoder static???
>
> Ellers vil den anden klasse, som bruger denne klasse, ikke compile. Jeg
har
> ikke lige undersøgt om dette er den rigtige løsning. Jeg havde godt nok en
> fornemmelse af at det ikke var det rigtige. Men det kan skyldes at jeg
bare
> gør noget uden at vide hvorfor det virker, det føles vel aldrig rigtigt.
>

Det er i dit tilfælde helt rigtigt at gøre dine metoder static, du da jo kun
skal bruge metoderne på klasseniveau og ikke objekt niveau.
Static betyder blot at metoderne tilhører klassen php4 og dermed også alle
objekter af denne klasse. Hvis du i din metode benyttede dig af interne
variable i et php4-objekt, ville det være knap så smart.

Hvis du ikke havde lavet metoderne static ville du være nødt til først at
oprette et objekt af klassen for at benytte metoderne.

Mvh Allan E



Niels Andersen (17-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 17-12-02 20:38

Allan E wrote in <atnu0d$7m2$1@sunsite.dk>:
> Hvis du ikke havde lavet metoderne static ville du være nødt til først at
> oprette et objekt af klassen for at benytte metoderne.

Aha, så er jeg med. Mange tak. :)

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Søg
Reklame
Statistik
Spørgsmål : 177492
Tips : 31966
Nyheder : 719565
Indlæg : 6408466
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste