/*
 */
/*
 * A test of the undocumented sun.misc.Base64Encoder and
 * sun.misc.Base64Decoder classes
 */

import java.io.*;
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;

public class Base64Test
{
	public static void main (String[] args)
	{
		String str = "";
		String fileName = "";
		
		switch (args.length) {
			case 0 :
				System.out.println("USAGE: java Base64Test stringToEncode [fileToEncode]");
				return;
			case 1 :
				str = args[0];
				break;
			default :
				str = args[0];
				fileName = args[1];
				break;
		}
		
		try {
			BASE64Encoder encoder = new BASE64Encoder();
			BASE64Decoder decoder = new BASE64Decoder();
			
			String encodedStr = encoder.encodeBuffer(str.getBytes());
			byte[] decodedStr = decoder.decodeBuffer(encodedStr);
			System.out.println("Original String = " + str);
			System.out.println(" Encoded String = " + encodedStr);
			System.out.println(" Decoded String = " + new String(decodedStr));
			
			if (fileName.length() > 0) {
				// the encodeBuffer and decodeBuffer methods can also
				// accept an InputStream and an OutputStream as parameters,
				// which is handy for working with files
				String encFileName = fileName + ".enc";
				String decFileName = fileName + ".dec";
				
				FileInputStream in = new FileInputStream(fileName);
				FileOutputStream out = new FileOutputStream(encFileName);
				encoder.encodeBuffer(in, out);
				in.close();
				out.close();
				
				in = new FileInputStream(encFileName);
				out = new FileOutputStream(decFileName);
				decoder.decodeBuffer(in, out);
				in.close();
				out.close();
				
				System.out.println("\nOriginal File = " + fileName);
				System.out.println(" Encoded File = " + encFileName);
				System.out.println(" Decoded File = " + decFileName);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
}