package android.xml.plist;
import java.util.Arrays;
/**
* A very fast and memory efficient class to encode and decode to and from
* BASE64 in full accordance with RFC 2045.<br>
* <br>
* On Windows XP sp1 with 1.4.2_04 and later ;), this encoder and decoder is
* about 10 times faster on small arrays (10 - 1000 bytes) and 2-3 times as fast
* on larger arrays (10000 - 1000000 bytes) compared to
* <code>sun.misc.Encoder()/Decoder()</code>.<br>
* <br>
*
* On byte arrays the encoder is about 20% faster than Jakarta Commons Base64
* Codec for encode and about 50% faster for decoding large arrays. This
* implementation is about twice as fast on very small arrays (< 30 bytes). If
* source/destination is a <code>String</code> this version is about three times
* as fast due to the fact that the Commons Codec result has to be recoded to a
* <code>String</code> from <code>byte[]</code>, which is very expensive.<br>
* <br>
*
* This encode/decode algorithm doesn't create any temporary arrays as many
* other codecs do, it only allocates the resulting array. This produces less
* garbage and it is possible to handle arrays twice as large as algorithms that
* create a temporary array. (E.g. Jakarta Commons Codec). It is unknown whether
* Sun's <code>sun.misc.Encoder()/Decoder()</code> produce temporary arrays but
* since performance is quite low it probably does.<br>
* <br>
*
* The encoder produces the same output as the Sun one except that the Sun's
* encoder appends a trailing line separator if the last character isn't a pad.
* Unclear why but it only adds to the length and is probably a side effect.
* Both are in conformance with RFC 2045 though.<br>
* Commons codec seem to always att a trailing line separator.<br>
* <br>
*
* <b>Note!</b> The encode/decode method pairs (types) come in three versions
* with the <b>exact</b> same algorithm and thus a lot of code redundancy. This
* is to not create any temporary arrays for transcoding to/from different
* format types. The methods not used can simply be commented out.<br>
* <br>
*
* There is also a "fast" version of all decode methods that works the same way
* as the normal ones, but har a few demands on the decoded input. Normally
* though, these fast verions should be used if the source if the input is known
* and it hasn't bee tampered with.<br>
* <br>
*
* If you find the code useful or you find a bug, please send me a note at
* base64 @ miginfocom . com.
*
* Licence (BSD): ==============
*
* Copyright (c) 2004, Mikael Grev, MiG InfoCom AB. (base64 @ miginfocom . com)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer. Redistributions in binary
* form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided
* with the distribution. Neither the name of the MiG InfoCom AB nor the names
* of its contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* @version 2.2
* @author Mikael Grev Date: 2004-aug-02 Time: 11:31:11
*/
public class PListXMLBase64 {
private static final char[] CA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
.toCharArray();
private static final int[] IA = new int[256];
static {
Arrays.fill(IA, -1);
for (int i = 0, iS = CA.length; i < iS; i++)
IA[CA[i]] = i;
IA['='] = 0;
}
// ****************************************************************************************
// * char[] version
// ****************************************************************************************
/**
* Encodes a raw byte array into a BASE64 <code>char[]</code> representation
* i accordance with RFC 2045.
*
* @param sArr
* The bytes to convert. If <code>null</code> or length 0 an
* empty array will be returned.
* @param lineSep
* Optional "\r\n" after 76 characters, unless end of file.<br>
* No line separator will be in breach of RFC 2045 which
* specifies max 76 per line but will be a little faster.
* @return A BASE64 encoded array. Never <code>null</code>.
*/
public final static char[] encodeToChar(byte[] sArr, boolean lineSep) {
// Check special case
int sLen = sArr != null ? sArr.length : 0;
if (sLen == 0)
return new char[0];
int eLen = (sLen / 3) * 3; // Length of even 24-bits.
int cCnt = ((sLen - 1) / 3 + 1) << 2; // Returned character count
int dLen = cCnt + (lineSep ? (cCnt - 1) / 76 << 1 : 0); // Length of
// returned
// array
char[] dArr = new char[dLen];
// Encode even 24-bits
for (int s = 0, d = 0, cc = 0; s < eLen;) {
// Copy next three bytes into lower 24 bits of int, paying attension
// to sign.
int i = (sArr[s++] & 0xff) << 16 | (sArr[s++] & 0xff) << 8
| (sArr[s++] & 0xff);
// Encode the int into four chars
dArr[d++] = CA[(i >>> 18) & 0x3f];
dArr[d++] = CA[(i >>> 12) & 0x3f];
dArr[d++] = CA[(i >>> 6) & 0x3f];
dArr[d++] = CA[i & 0x3f];
// Add optional line separator
if (lineSep && ++cc == 19 && d < dLen - 2) {
dArr[d++] = '\r';
dArr[d++] = '\n';
cc = 0;
}
}
// Pad and encode last bits if source isn't even 24 bits.
int left = sLen - eLen; // 0 - 2.
if (left > 0) {
// Prepare the int
int i = ((sArr[eLen] & 0xff) << 10)
| (left == 2 ? ((sArr[sLen - 1] & 0xff) << 2) : 0);
// Set last four chars
dArr[dLen - 4] = CA[i >> 12];
dArr[dLen - 3] = CA[(i >>> 6) & 0x3f];
dArr[dLen - 2] = left == 2 ? CA[i & 0x3f] : '=';
dArr[dLen - 1] = '=';
}
return dArr;
}
/**
* Decodes a BASE64 encoded char array. All illegal characters will be
* ignored and can handle both arrays with and without line separators.
*
* @param sArr
* The source array. <code>null</code> or length 0 will return an
* empty array.
* @return The decoded array of bytes. May be of length 0. Will be
* <code>null</code> if the legal characters (including '=') isn't
* divideable by 4. (I.e. definitely corrupted).
*/
public final static byte[] decode(char[] sArr) {
// Check special case
int sLen = sArr != null ? sArr.length : 0;
if (sLen == 0)
return new byte[0];
// Count illegal characters (including '\r', '\n') to know what size the
// returned array will be,
// so we don't have to reallocate & copy it later.
int sepCnt = 0; // Number of separator characters. (Actually illegal
// characters, but that's a bonus...)
for (int i = 0; i < sLen; i++)
// If input is "pure" (I.e. no line separators or illegal chars)
// base64 this loop can be commented out.
if (IA
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Android录制编辑播放视频解决方案。 (810个子文件)
libcurl.a 18.11MB
libavcodec.a 12.98MB
libavcodec.a 12.19MB
libavcodec.a 11.48MB
libcurl.a 4.35MB
libcurl.a 4.26MB
libavformat.a 3.26MB
libavformat.a 3.24MB
libavformat.a 2.76MB
libavfilter.a 1.84MB
libavfilter.a 1.8MB
libavfilter.a 1.68MB
libtiff.a 1.52MB
libx264.a 1.45MB
libjpeg.a 1.43MB
libx264.a 1.08MB
libx264.a 1.08MB
libpng.a 829KB
libtiff.a 616KB
libswscale.a 600KB
libtiff.a 563KB
libavutil.a 534KB
libavutil.a 525KB
libmp3lame.a 494KB
libswscale.a 473KB
libavutil.a 471KB
libswscale.a 431KB
libmp3lame.a 422KB
libmp3lame.a 412KB
libjpeg.a 337KB
libjpeg.a 335KB
libpng.a 280KB
libpng.a 260KB
libavresample.a 190KB
libswresample.a 164KB
libpostproc.a 132KB
libavresample.a 115KB
libswresample.a 110KB
libfaac.a 101KB
libswresample.a 101KB
libavresample.a 98KB
libfaac.a 94KB
libfaac.a 94KB
libavdevice.a 80KB
libavdevice.a 78KB
libavdevice.a 68KB
libpostproc.a 67KB
libpostproc.a 36KB
mat4.c 22KB
quaternion.c 17KB
mat3.c 10KB
vec3.c 7KB
matrix.c 6KB
ray2.c 5KB
vec4.c 5KB
plane.c 5KB
vec2.c 3KB
neon_matrix_impl.c 3KB
mat4stack.c 3KB
aabb.c 2KB
utility.c 2KB
baozha.pvr.ccz 425KB
bingdong.pvr.ccz 339KB
ChangeLog 25KB
EFEditorPageView.class 17KB
EFRecordPageView.class 15KB
EFEffectsManager.class 9KB
EFJsonParser.class 8KB
EFDownloadManager.class 8KB
EFEffectOnlineView.class 7KB
PListXMLBase64.class 7KB
Dict.class 7KB
EFEffectPageView.class 7KB
NXPageView.class 6KB
PList.class 6KB
NXPageStack.class 6KB
EFRequestsManager.class 6KB
E4FunTool.class 5KB
EFCameraView.class 5KB
Array.class 5KB
EFPageView.class 5KB
PListXMLHandler.class 5KB
EFEffectDataStructs.class 5KB
EFListView.class 4KB
NXPageRoot.class 4KB
EFEffectItemView.class 4KB
EFPopTextView.class 4KB
AppMainActivity.class 4KB
EFEffectFilmView.class 4KB
EFJsonBuilder.class 4KB
EFTextButton.class 4KB
EFEffectListView.class 3KB
EFRequestsManager$EFRequest.class 3KB
NXHttpRequest.class 3KB
EFEffectDataStructs$EFEffectDataItem.class 3KB
EFSliderView.class 3KB
BaseXMLParser.class 3KB
EFImageButton.class 2KB
Date.class 2KB
EFProgressView.class 2KB
共 810 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
花岗岩是甜的
- 粉丝: 57
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页