[Java学习] 将PDF格式文件转成二进制并生成Base64编码,将Base64编码转成PDF文件

时间:2022-11-12 20:25:55
将PDF格式文件转成二进制并生成Base64编码,将Base64编码转成PDF文件
BASE64Encoder和BASE64Decoder这两个方法是sun公司的内部方法,并没有在java api中公开过,所以使用这些方法是不安全的,
将来随时可能会从中去除,所以相应的应该使用替代的对象及方法,建议使用apache公司的API
用到了 BufferedInputStream、 FileOutputStream fout、 BufferedOutputStream bout 之间的装换关系
  1. // 为工程添加 sun.misc.BASE64Encoder和sun.misc.BASE64Decoder包:  
  2. //右键项目》属性》Java Build Path》jre System Library 》access rules》resolution选择accessible,下面填上**点击确定即可!  
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.ByteArrayInputStream;    
  6. import java.io.ByteArrayOutputStream;    
  7. import java.io.File;    
  8. import java.io.FileInputStream;
  9. import java.io.FileNotFoundException;
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;    
  12. http://www.nvzi91.cn/gongjingfeida/29943.html
  13. import org.apache.commons.codec.binary.Base64;
  14. http://www.nvzi91.cn/gongjingfeida/29944.html
  15. import sun.misc.BASE64Decoder;    
  16. import sun.misc.BASE64Encoder;    
  17.    http://www.nvzi91.cn/gongjingmilan/29945.html 
  18. public class TestPDFBinary {    
  19.         /*BASE64Encoder和BASE64Decoder这两个方法是sun公司的内部方法,并没有在java api中公开过,所以使用这些方法是不安全的,
  20.          * 将来随时可能会从中去除,所以相应的应该使用替代的对象及方法,建议使用apache公司的API*/
  21.     static BASE64Encoder encoder = new sun.misc.BASE64Encoder();    
  22.     static BASE64Decoder decoder = new sun.misc.BASE64Decoder();    
  23.         
  24.     public static void main(String[] args) {    
  25.          //将PDF格式文件转成base64编码 
  26.              String base64String = getPDFBinary(new File("/home/amarsoft/AFm.pdf"));
  27.              System.out.println(base64String);
  28.             //将base64的编码转成PDF格式文件
  29.             base64StringToPDF(base64String);
  30.     }   http://www.nvzi91.cn/gongjingxirou/29946.html 
  31.         
  32.     /**
  33.      *  将PDF转换成base64编码
  34.      *  1.使用BufferedInputStream和FileInputStream从File指定的文件中读取内容;
  35.      *  2.然后建立写入到ByteArrayOutputStream底层输出流对象的缓冲输出流BufferedOutputStream
  36.      *  3.底层输出流转换成字节数组,然后由BASE64Encoder的对象对流进行编码
  37.      * */http://www.nvzi91.cn/gongwaiyun/29947.html
  38.     static String getPDFBinary(File file) {
  39.             FileInputStream fin =null;
  40.             BufferedInputStream bin =null;
  41.             ByteArrayOutputStream baos = null;
  42.             BufferedOutputStream bout =null;
  43.             try {
  44.                     //建立读取文件的文件输出流
  45.                     fin = new FileInputStream(file);
  46.                     //在文件输出流上安装节点流(更大效率读取)
  47.                     bin = new BufferedInputStream(fin);
  48.                     // 创建一个新的 byte 数组输出流,它具有指定大小的缓冲区容量
  49.                     baos = new ByteArrayOutputStream();
  50.                     //创建一个新的缓冲输出流,以将数据写入指定的底层输出流
  51.                     bout = new BufferedOutputStream(baos);
  52.                     byte[] buffer = new byte[1024];
  53.                     int len = bin.read(buffer);
  54.                     while(len != -1){
  55.                             bout.write(buffer, 0, len);
  56.                             len = bin.read(buffer);
  57.                     }http://www.kmrlyy.com/lcnz/33459.html
  58.                     //刷新此输出流并强制写出所有缓冲的输出字节,必须这行代码,否则有可能有问题
  59.                     bout.flush();
  60.                      byte[] bytes = baos.toByteArray();
  61.                      //sun公司的API
  62.                      return encoder.encodeBuffer(bytes).trim();  
  63.                      //apache公司的API
  64.                      //return Base64.encodeBase64String(bytes);
  65.                     
  66.                 } catch (FileNotFoundException e) {
  67.                         e.printStackTrace();
  68.                 } catch (IOException e) {
  69.                         e.printStackTrace();
  70.                 }finally{http://www.kmrlyy.com/lcnz/33460.html
  71.                         try {
  72.                                 fin.close();
  73.                                 bin.close();
  74.                                 //关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException
  75.                                 //baos.close();
  76.                                 bout.close();
  77.                         } catch (IOException e) {
  78.                                 e.printStackTrace();
  79.                         }
  80.                 }http://www.kmrlyy.com/penqiangyan/33461.html
  81.             return null;
  82.     }
  83.         
  84.     /**http://www.kmrlyy.com/zgnma/33463.html
  85.      * 将base64编码转换成PDF
  86.      * @param base64sString
  87.      * 1.使用BASE64Decoder对编码的字符串解码成字节数组
  88.      *  2.使用底层输入流ByteArrayInputStream对象从字节数组中获取数据;
  89.      *  3.建立从底层输入流中读取数据的BufferedInputStream缓冲输出流对象;
  90.      *  4.使用BufferedOutputStream和FileOutputSteam输出数据到指定的文件中
  91.      */
  92.     static void base64StringToPDF(String base64sString){
  93.             BufferedInputStream bin = null;
  94.             FileOutputStream fout = null;
  95.             BufferedOutputStream bout = null;
  96.             try {http://www.kmrlyy.com/niaodaoyan/33464.html
  97.                      //将base64编码的字符串解码成字节数组
  98.                         byte[] bytes = decoder.decodeBuffer(base64sString);
  99.                     //apache公司的API
  100.                     //byte[] bytes = Base64.decodeBase64(base64sString);
  101.                         //创建一个将bytes作为其缓冲区的ByteArrayInputStream对象
  102.                         ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
  103.                         //创建从底层输入流中读取数据的缓冲输入流对象
  104.                         bin = new BufferedInputStream(bais);
  105.                         //指定输出的文件http://m.nvzi91.cn/nxby/29355.html
  106.                         File file = new File("/home/amarsoft/test.pdf");
  107.                         //创建到指定文件的输出流
  108.                         fout  = new FileOutputStream(file);
  109.                         //为文件输出流对接缓冲输出流对象
  110.                         bout = new BufferedOutputStream(fout);
  111.                         http://m.nvzi91.cn/gongjingmilan/29356.html
  112.                         byte[] buffers = new byte[1024];
  113.                         int len = bin.read(buffers);
  114.                         while(len != -1){
  115.                                 bout.write(buffers, 0, len);
  116.                                 len = bin.read(buffers);
  117.                         }
  118.                         //刷新此输出流并强制写出所有缓冲的输出字节,必须这行代码,否则有可能有问题
  119.                         bout.flush();
  120.                         
  121.                 } catch (IOException e) {
  122.                         e.printStackTrace();
  123.                 }finally{
  124.                         try {http://m.nvzi91.cn/yindaoyan/29357.htmlwww.nvzi91.cn
  125.                                 bin.close();
  126.                                 fout.close();
  127.                                 bout.close();
  128.                         } catch (IOException e) {
  129.                                 e.printStackTrace();
  130.                         }/www.kmrlyy.com
  131.                 }
  132.     }
  133. } m.nvzi91.cn