Base64Encoder.java
上传用户:qing5858
上传日期:2015-10-27
资源大小:6056k
文件大小:3k
源码类别:

搜索引擎

开发平台:

Java

  1. package net.javacoding.jspider.core.util;
  2. /**
  3.  * This class is derived from the one found in the JavaWorld.com article
  4.  * http://www.javaworld.com/javaworld/javatips/jw-javatip36-p2.html
  5.  *
  6.  * $Id: Base64Encoder.java,v 1.2 2003/02/11 17:27:04 vanrogu Exp $
  7.  *
  8.  */
  9. public abstract class Base64Encoder {
  10.     public final static String base64Encode(String strInput) {
  11.         if (strInput == null) return null;
  12.         byte byteData[] = new byte[strInput.length()];
  13.         byteData = strInput.getBytes();
  14.         return new String(base64Encode(byteData));
  15.     }
  16.     public final static byte[] base64Encode(byte[] byteData) {
  17.         if (byteData == null) return null;
  18.         int iSrcIdx;      // index into source (byteData)
  19.         int iDestIdx;     // index into destination (byteDest)
  20.         byte byteDest[] = new byte[((byteData.length + 2) / 3) * 4];
  21.         for (iSrcIdx = 0, iDestIdx = 0; iSrcIdx < byteData.length - 2; iSrcIdx += 3) {
  22.             byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx] >>> 2) & 077);
  23.             byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx + 1] >>> 4) & 017 |
  24.                     (byteData[iSrcIdx] << 4) & 077);
  25.             byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx + 2] >>> 6) & 003 |
  26.                     (byteData[iSrcIdx + 1] << 2) & 077);
  27.             byteDest[iDestIdx++] = (byte) (byteData[iSrcIdx + 2] & 077);
  28.         }
  29.         if (iSrcIdx < byteData.length) {
  30.             byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx] >>> 2) & 077);
  31.             if (iSrcIdx < byteData.length - 1) {
  32.                 byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx + 1] >>> 4) & 017 |
  33.                         (byteData[iSrcIdx] << 4) & 077);
  34.                 byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx + 1] << 2) & 077);
  35.             } else
  36.                 byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx] << 4) & 077);
  37.         }
  38.         for (iSrcIdx = 0; iSrcIdx < iDestIdx; iSrcIdx++) {
  39.             if (byteDest[iSrcIdx] < 26)
  40.                 byteDest[iSrcIdx] = (byte) (byteDest[iSrcIdx] + 'A');
  41.             else if (byteDest[iSrcIdx] < 52)
  42.                 byteDest[iSrcIdx] = (byte) (byteDest[iSrcIdx] + 'a' - 26);
  43.             else if (byteDest[iSrcIdx] < 62)
  44.                 byteDest[iSrcIdx] = (byte) (byteDest[iSrcIdx] + '0' - 52);
  45.             else if (byteDest[iSrcIdx] < 63)
  46.                 byteDest[iSrcIdx] = '+';
  47.             else
  48.                 byteDest[iSrcIdx] = '/';
  49.         }
  50.         for (; iSrcIdx < byteDest.length; iSrcIdx++)
  51.             byteDest[iSrcIdx] = '=';
  52.         return byteDest;
  53.     }
  54. }