2013年5月28日火曜日

Scala

面白い
関数をオブジェクトとして扱えるのがよかった

2013年5月3日金曜日

ServletでBase64を扱う際に

BASIC認証がやりたくて調べていたのですが、サンプルコードにBase64をデコードするメソッドが大抵書いてあるのですが、そのメソッドがGAEではつかえない。。。

それ以外の部分は動きそうだったのでその部分だけ自分で書くかネットのを流用しよう。
と思った。

maru sourceさまの
http://blog.h13i32maru.jp/entry/20110116/1295187291
を使わせてもらった

ただ、デコードの部分にバグがありbyte配列に後ろに0が入っているのでnew String(byte[]);としたときに変な文字列が後ろにつくことになる。

方法としては、後ろの0がある配列を取り除く繰り返し文を書くか、0 byteの文字列を取り除くコードを書くか(幸いJAVAのStringとても便利だ!)
あとは、新しく自分で作るだがめんだくさい

今回はファイル操作などせずに単純に文字列をデコードしたいだけなので0 byteの文字列を取り除くことにする
もし、仮にmp3などをデコード、エンコードしたい場合は一度バイナリファイルを見てみるといいだろう
自分でつくるか他に探し出すという結果しか出てこないだろう、

   String result = decodeToString("エンコードされた文字列");
   byte[] zerobyte={0};
   result = result.replace(new String(zerobyte),"");

もしくは一番後ろの文字列
   String str = encode("abcde".getBytes());
   byte[] result=decode(str);
   int length=result.length-1;
   while(true){
      if(result[length]!=0){
         break;
      }
      else{
        length--;
      }
   }
   str=new String(result).substring(0,length+1);

あとは有効そうなのはもともとの文字列の長さを他に持たせておきそのサイズだけ取り出すとかかなあ