2012年12月11日火曜日

java : Base64でのエンコード

Base64でエンコードするコードです。 どこにでも載ってそうなモノですが、次のネタ(データURIスキームがちょっと出てくる)で使うので一応掲載。 リダイレクトして使う事を想定。

java SimpleBase64Encoder pin.png > res.txt

お約束的なことですが、sun.misc.BASE64Encoderはいつ消えるか分からないので注意。 そういうわけでコンパイル時に警告も出ます。

import java.io.File;
import java.io.FileInputStream;
import sun.misc.BASE64Encoder;

public class SimpleBase64Encoder {

    public static final long MAX_FILE_SIZE = 1000000;

    public static void main(String[] args) {
        if(args.length != 1)
        {
            System.err.println("第1引数のファイルをbase64でエンコードします。標準出力に出力します。");
            return;
        }

        File file = new File(args[0] );
        long len = file.length();
        if(MAX_FILE_SIZE < len)
        {
            System.err.println("ファイルサイズが大きすぎる。");
            return;
        }

        try(FileInputStream fis = new FileInputStream(file) )
        {
            byte[] data = new byte[ (int)len];
            long readLen = fis.read(data);
            if(len != readLen)
            {
                System.err.println("ファイル読み込み失敗");
                return;
            }

            BASE64Encoder encoder = new BASE64Encoder();
            System.out.println(encoder.encodeBuffer(data) );
        }
        catch(Exception exc)
        {
            System.err.println("ファイル読み込み or 変換失敗");
            exc.printStackTrace();
        }
    }
}