17. november 2009 - 14:22
Der er
17 kommentarer og 1 løsning
forklaring af kode
hvad betyder det her: mydecclass = (Base64)Class.forName(handlerClass).newInstance(); Det er Base64 delen som jeg ikke forstår. Hvad vil det sige når man sætter (xxx) foran en Class.forname(...
Annonceindlæg fra Computerworld
17. november 2009 - 14:32
#1
At man 'caster' dvs. fastsætter typen på det der kommer efter til den type, der står i parantes, her altså til Base64.
17. november 2009 - 14:52
#2
Object mydecclass = Class.forName(handlerClass).newInstance(); saa kan man kun bruge de metoder der er i Object klassen Base64 mydecclass = (Base64)Class.forName(handlerClass).newInstance(); saa kan man bruge de metoder som er i Base64 klassen selvom de ikke er i Object
17. november 2009 - 15:35
#3
super - tak post gerne svar :)
17. november 2009 - 16:11
#4
hvis der er nogen af jer der ved hvordan jeg caster en klasse jeg loader ind i jython på den måde, så sig endelig til
17. november 2009 - 16:29
#5
Det er ikke noedvendigt i jython. I Python kalder du bare en metode paa et objekt og ved koersel checkes der om metoden eksisterer. Ja => den kaldes. Nej => du faar en fejl. I Java checkes der paa compile time om metoden eksisterer og derfor kan det vaere noedvendigt at caste til en anden type for at faa lov til at compile.
17. november 2009 - 16:45
#6
mit problem er at jeg har en base64 encoding/decoding funktion i java, men når jeg en-/decoder ved at kalde funktionen fra jython får jeg alle mulige tegn tilbage. Jeg kan forstå hvis dette var tilfældet nogle gange med decoding, men kan det virkelig også være tilfældet med encoding? i det tilfælde forstår jeg ikke base64 alfabetet ;o) Det var derfor jeg tænkte at jeg måske skulle kaste, selvom python selv finder.
17. november 2009 - 17:15
#7
Foelgende virker hos mig (med passende jar filer i CLASSPATH): import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.mail.MessagingException; import javax.mail.internet.MimeUtility; public class B64 { public static String b64encode(byte[] b) throws MessagingException, IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStream b64os = MimeUtility.encode(baos, "base64"); b64os.write(b); b64os.close(); return new String(baos.toByteArray()); } public static byte[] b64decode(String s) throws MessagingException, IOException { ByteArrayInputStream bais = new ByteArrayInputStream(s.getBytes()); InputStream b64is = MimeUtility.decode(bais, "Base64"); byte[] tmp = new byte[s.length()]; int n = b64is.read(tmp); byte[] res = new byte[n]; System.arraycopy(tmp, 0, res, 0, n); return res; } } import B64 b1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print b1 s = B64.b64encode(b1) print s b2 = B64.b64decode(s) print b2
17. november 2009 - 19:51
#8
mit problem udspringer af at hvis jeg har min java metode: public String base64Chars() { String s = ""; int ai[] = new int[64]; ai[0] = 17; ai[1] = 30; ai[2] = 51; ai[3] = 33; ai[4] = 50; ai[5] = 35; ai[6] = 55; ai[7] = 28; ai[8] = 19; ai[9] = 16; ai[10] = 1; ai[11] = 45; ai[12] = 41; ai[13] = 62; ai[14] = 24; ai[15] = 39; ai[16] = 6; ai[17] = 22; ai[18] = 42; ai[19] = 7; ai[20] = 11; ai[21] = 4; ai[22] = 29; ai[23] = 32; ai[24] = 34; ai[25] = 31; ai[26] = 5; ai[27] = 58; ai[28] = 44; ai[29] = 61; ai[30] = 56; ai[31] = 47; ai[32] = 10; ai[33] = 37; ai[34] = 46; ai[35] = 49; ai[36] = 13; ai[37] = 43; ai[38] = 57; ai[39] = 27; ai[40] = 26; ai[41] = 59; ai[42] = 38; ai[43] = 25; ai[44] = 15; ai[45] = 36; ai[46] = 60; ai[47] = 9; ai[48] = 3; ai[49] = 12; ai[50] = 23; ai[51] = 20; ai[52] = 52; ai[53] = 14; ai[54] = 8; ai[55] = 54; ai[56] = 48; ai[57] = 0; ai[58] = 2; ai[59] = 63; ai[60] = 53; ai[61] = 40; ai[62] = 18; ai[63] = 21; for(int i = 0; i <= 63; i++) s = s.append(new StringBuffer()).append((char)chars[ai[i]]).toString(); return s; } og jeg kalder i jython class.base64Chars() så får jeg tilbage: %2G5F7K0'$A=R,;*>1463N@QLC9BE!?M/.O:-#8P +(H"JDSI<&) som jo ganske vist er af længden 64, men char'sne er da helt off?
17. november 2009 - 20:09
#9
Hvad indeholde chars array'et i Java koden? Jeg har lidt mistanke om at fejlen ligger i Java koden.
17. november 2009 - 20:13
#10
hm... når jeg ser på arrayet går det op for mig at den simpelthen bare tager chars efter ascii tabel og at [0] = #
17. november 2009 - 20:20
#11
har valgt at sende arne_v koden i en intern besked, da jeg helst ikke vil have at malicious typer spotter koden og får alt for nemt ved at breake den. Jeg beklager til dem der kigger i tråden for at finde hjælp til et lignende problem, jeg skal prøve at redegøre for udviklingen senere i tråden
17. november 2009 - 20:21
#12
Koden ser generelt meget suspekt ud. String s = ""; ... for(int i = 0; i <= 63; i++) s = s.append(new StringBuffer()).append((char)chars[ai[i]]).toString(); return s; kunne laves som: String s = ""; ... for(int i = 0; i < 64; i++) s = s + (char)chars[ai[i]]; return s; eller: StringBuilder s = new StringBuilder(); ... for(int i = 0; i < 643; i++) s.Append((char)chars[ai[i]]); return s.toString();
17. november 2009 - 20:22
#13
64 ikke 643
17. november 2009 - 20:28
#14
men det mystiske er jo at det virker i java, men ikke i jython
17. november 2009 - 21:50
#15
jeg tror problemet skyldes at jeg ikke kan caste til base64 den fortolker char() som streng og ikke som base64 karakterer
17. november 2009 - 21:50
#16
og "den" er en term der er teknisk gyldig ;)
31. december 2009 - 01:41
#17
drop et svar =)
31. december 2009 - 01:46
#18
ok
Kurser inden for grundlæggende programmering