#

Französisch für Java

Beim Surfen bin ich auf ein Buch gestoßen, in dem einfache Java Beispiele erklärt werden. Das Buch ist in Französisch. Dabei fand ich folgendes Beispiel interessant:

class GameBoyAdvance {
  String typeCartouche;
  int largeurEcran;
 
  void démarrerJeu() {
  }
 
  void arrêterJeu() {
  }
}

Interessant daran finde ich die Benutzung von akzentuierten Buchstaben in Methodennamen. Natürlich kann Java fast den gesamten UTF-8 Zeichensatz für Methoden- und Variablennamen benutzen. Aber dennoch ist es sehr ungewohnt so etwas zu sehen, wenn man ständig darum bemüht ist, seine Methoden international, also englisch, zu halten. Wie wohl Kode aussieht, der in nicht romanischen Lettern geschrieben wurde? Das wäre sicherlich eine sehr interessante Variante des Obfuskierens, wenn man seine Methoden nur noch in chinesischen, japanischen oder arabischen Lettern benennen würde.
Hier ein Beispiel für chinesischen Code (den ich leider nicht korrekt kopieren konnte):

class ³B²z°õ¦æºüÃþ§O implements Runnable {
  private ServerSocket ¶ÉÅ¥´¡®y;
  private Socket ³s½u´¡®y;
  DataInputStream  ¿é¤J;
  DataOutputStream ¿é¥X;
  String ½Ð¨D,½Ð¨DÀÉ®×;
  public ³B²z°õ¦æºüÃþ§O(ServerSocket ¶ÉÅ¥´¡®y, Socket ³s½u´¡®y) throws Exception {
    this.¶ÉÅ¥´¡®y = ¶ÉÅ¥´¡®y;
    this.³s½u´¡®y = ³s½u´¡®y;
  }
 
  public void run() {
    byte[] Ū¨ú¸ê®Æ=new byte[4096];
    int °¾²¾¶q=0;
    String ÀɮפÀ¹j²Å¸¹=System.getProperty("file.separator");
    try {
      System.out.println("«È¤áºÝ¤§³s½u¨Ó¦Û©óIP:  " +³s½u´¡®y.getInetAddress().getHostAddress());
      while(true) {
        ¿é¤J=new DataInputStream(³s½u´¡®y.getInputStream());
        ¿é¤J.read(Ū¨ú¸ê®Æ, °¾²¾¶q, 1);
        °¾²¾¶q++;
        if ( Ū¨ú¸ê®Æ[°¾²¾¶q-1]==(byte)10 && °¾²¾¶q >= 4 )
          if ( Ū¨ú¸ê®Æ[°¾²¾¶q-4]==(byte)13 && Ū¨ú¸ê®Æ[°¾²¾¶q-3]==(byte)10 && Ū¨ú¸ê®Æ[°¾²¾¶q-2]==(byte)13 )
            break;
      } //±Ô­z:while °Ï¶ôµ²§ô
      ½Ð¨D = new String(Ū¨ú¸ê®Æ, 0, °¾²¾¶q);
      System.out.println(½Ð¨D);
      StringTokenizer ½Ð¨D¶µ¥Ø = new StringTokenizer(½Ð¨D);
      if ((½Ð¨D¶µ¥Ø.countTokens()>= 2) && ½Ð¨D¶µ¥Ø.nextToken().equalsIgnoreCase("GET")) {
        ½Ð¨DÀÉ®× = ½Ð¨D¶µ¥Ø.nextToken(); 
        if (½Ð¨DÀÉ®×.startsWith("/")) ½Ð¨DÀÉ®× = ½Ð¨DÀÉ®×.substring(1); //¥h±¼"/"
        if (½Ð¨DÀÉ®×.endsWith("/") || ½Ð¨DÀÉ®×.equals("")) ½Ð¨DÀÉ®× = ½Ð¨DÀÉ®× + JWServer.¹w³]ÀÉ®×;
        ½Ð¨DÀÉ®× = JWServer.µêÀÀ®Ú¥Ø¿ý + ÀɮפÀ¹j²Å¸¹ + ½Ð¨DÀÉ®× ;
        if (!(new File(½Ð¨DÀÉ®×).exists())) ½Ð¨DÀÉ®× = JWServer.¿ù»~°T®§¥Ø¿ý + ÀɮפÀ¹j²Å¸¹ + "404.html" ;
        ¦^À³(½Ð¨DÀÉ®×);
      }
      else {
        ½Ð¨DÀÉ®× = JWServer.¿ù»~°T®§¥Ø¿ý + ÀɮפÀ¹j²Å¸¹ + "400.html" ;
        ¦^À³(½Ð¨DÀÉ®×);
      }
    } //±Ô­z:try °Ï¶ôµ²§ô 
    catch (Exception ¨Ò¥~) {System.out.println("¨Ò¥~²£¥Í:\n"+¨Ò¥~); }  
    finally {
      try { ³s½u´¡®y.close(); }
      catch (Exception ¨Ò¥~) {}
    }
  } //¤èªk:run() ©w¸q°Ï¶ôµ²§ô
 
  void ¦^À³(String ½Ð¨D) {
    try {
      File ½Ð¨DÀÉ®× = new File(½Ð¨D);
      DataInputStream ½Ð¨DÀɮצê¬y = new DataInputStream(new FileInputStream(½Ð¨DÀÉ®×));
      int Àɮתø«× = (int) ½Ð¨DÀÉ®×.length();
      byte[] Àɮ׸ê®Æ = new byte[Àɮתø«×];
      ½Ð¨DÀɮצê¬y.read(Àɮ׸ê®Æ);
      String ¦^À³¼ÐÀY =
      "HTTP/1.0 200 OK\r\n" +
      "JWServer (By Jehn-Ruey Jiang)\r\n" +
      "Content-Length: " + Àɮתø«× +"\r\n" +
      "Content-Type: " + ¦^À³MIME«¬§O(½Ð¨D) + "\r\n\r\n" ;
      ¿é¥X=new DataOutputStream(³s½u´¡®y.getOutputStream());
      ¿é¥X.writeBytes(¦^À³¼ÐÀY);
      ¿é¥X.write(Àɮ׸ê®Æ);
      ¿é¥X.flush();
      ¿é¥X.close();
    } //±Ô­z:try °Ï¶ôµ²§ô
    catch(Exception ¨Ò¥~) {System.out.println("¨Ò¥~²£¥Í:\n"+¨Ò¥~); }  
  } //¤èªk:¦^À³() ©w¸q°Ï¶ôµ²§ô

Tags:, ,

Leave a Reply »»

Note: All comments are manually approved to avoid spam. So if your comment doesn't appear immediately, that's ok. Have patience, it can take some days until I have the time to approve my comments.