PDF形式ファイルをバイナリに変換してBase 64符号化を生成し、Base 64符号化をPDFファイルに変換

4151 ワード

//       sun.misc.BASE64Encoder sun.misc.BASE64Decoder :  
//    》  》Java Build Path》jre System Library 》access rules》resolution  accessible,    **      !  
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;    
import java.io.ByteArrayOutputStream;    
import java.io.File;    
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;    

import org.apache.commons.codec.binary.Base64;

import sun.misc.BASE64Decoder;    
import sun.misc.BASE64Encoder;    
    
public class TestPDFBinary {    
	/*BASE64Encoder BASE64Decoder      sun       ,    java api    ,             ,
	 *            ,                 ,    apache   API*/
    static BASE64Encoder encoder = new sun.misc.BASE64Encoder();    
    static BASE64Decoder decoder = new sun.misc.BASE64Decoder();    
        
    public static void main(String[] args) {    
         // PDF      base64   
    	 String base64String = getPDFBinary(new File("/home/amarsoft/AFm.pdf"));
    	 System.out.println(base64String);
    	// base64     PDF    
    	base64StringToPDF(base64String);
    }    
        
    /**
     *   PDF   base64  
     *  1.  BufferedInputStream FileInputStream File          ;
     *  2.       ByteArrayOutputStream             BufferedOutputStream
     *  3.            ,   BASE64Encoder         
     * */
    static String getPDFBinary(File file) {
    	FileInputStream fin =null;
    	BufferedInputStream bin =null;
    	ByteArrayOutputStream baos = null;
    	BufferedOutputStream bout =null;
    	try {
    		//            
    		fin = new FileInputStream(file);
    		//            (      )
    		bin = new BufferedInputStream(fin);
    		//        byte      ,             
    		baos = new ByteArrayOutputStream();
    		//           ,              
    		bout = new BufferedOutputStream(baos);
    		byte[] buffer = new byte[1024];
    		int len = bin.read(buffer);
    		while(len != -1){
    			bout.write(buffer, 0, len);
    			len = bin.read(buffer);
    		}
    		//                    ,      ,        
    		bout.flush();
    		 byte[] bytes = baos.toByteArray();
    		 //sun   API
    		 return encoder.encodeBuffer(bytes).trim();  
    		 //apache   API
    		 //return Base64.encodeBase64String(bytes);
    		
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				fin.close();
				bin.close();
				//   ByteArrayOutputStream   。                 ,        IOException
				//baos.close();
				bout.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
    	return null;
    }
        
    /**
     *  base64     PDF
     * @param base64sString
     * 1.  BASE64Decoder              
     *  2.       ByteArrayInputStream            ;
     *  3.              BufferedInputStream       ;
     *  4.  BufferedOutputStream FileOutputSteam           
     */
    static void base64StringToPDF(String base64sString){
    	BufferedInputStream bin = null;
    	FileOutputStream fout = null;
    	BufferedOutputStream bout = null;
    	try {
    		 // base64             
			byte[] bytes = decoder.decodeBuffer(base64sString);
    		//apache   API
    		//byte[] bytes = Base64.decodeBase64(base64sString);
			//     bytes       ByteArrayInputStream  
			ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
			//                     
			bin = new BufferedInputStream(bais);
			//       
			File file = new File("/home/amarsoft/test.pdf");
			//           
			fout  = new FileOutputStream(file);
			//               
			bout = new BufferedOutputStream(fout);
			
			byte[] buffers = new byte[1024];
			int len = bin.read(buffers);
			while(len != -1){
				bout.write(buffers, 0, len);
				len = bin.read(buffers);
			}
			//                    ,      ,        
			bout.flush();
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				bin.close();
				fout.close();
				bout.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
    }
}