基于Java8的Base64Util工具类

import java.io.CharArrayWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.Reader;

import java.io.Writer;

import java.nio.charset.StandardCharsets;

/**

  • 在org.springframework.util包中有一个有同样功能的类:Base64Utils

*/

public class Base64Util {

public Base64Util() {

}

/**

  • 功能:编码字符串

  • @param data 源字符串

  • @return String

  • @author jiangshuai

*/

public static String encode(String data) {

return new String(encode(data.getBytes()));

}

/**

  • 功能:解码字符串

  • @param data 源字符串

  • @return String

  • @author jiangshuai

*/

public static String decode(String data) {

return new String(decode(data.toCharArray()));

}

/**

  • 功能:编码byte[]

  • @param data 源

  • @return char[]

  • @author jiangshuai

*/

public static char[] encode(byte[] data) {

char[] out = new char[((data.length + 2) / 3) * 4];

for (int i = 0, index = 0; i < data.length; i += 3, index += 4) {

boolean quad = false;

boolean trip = false;

int val = (0xFF & (int) data[i]);

val <<= 8;

if ((i + 1) < data.length) {

val |= (0xFF & (int) data[i + 1]);

trip = true;

}

val <<= 8;

if ((i + 2) < data.length) {

val |= (0xFF & (int) data[i + 2]);

quad = true;

}

out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)];

val >>= 6;

out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)];

val >>= 6;

out[index + 1] = alphabet[val & 0x3F];

val >>= 6;

out[index + 0] = alphabet[val & 0x3F];

}

return out;

}

/**

  • 功能:解码

  • @param data 编码后的字符数组

  • @return byte[]

  • @author jiangshuai

*/

public static byte[] decode(char[] data) {

int tempLen = data.length;

for (int ix = 0; ix < data.length; ix++) {

if ((data[ix] > 255) || codes[data[ix]] < 0) {

–tempLen; // ignore non-valid chars and padding

}

}

// calculate required length:

// – 3 bytes for every 4 valid base64 chars

// – plus 2 bytes if there are 3 extra base64 chars,

// or plus 1 byte if there are 2 extra.

int len = (tempLen / 4) * 3;

if ((tempLen % 4) == 3) {

len += 2;

}

if ((tempLen % 4) == 2) {

len += 1;

}

byte[] out = new byte[len];

int shift = 0; // # of excess bits stored in accum

int accum = 0; // excess bits

int index = 0;

// we now go through the entire array (NOT using the ‘tempLen’ value)

for (int ix = 0; ix < data.length; ix++) {

int value = (data[ix] > 255) ? -1 : codes[data[ix]];

if (value >= 0) { // skip over non-code

accum <<= 6; // bits shift up by 6 each time thru

shift += 6; // loop, with new bits being put in

accum |= value; // at the bottom.

if (shift >= 8) { // whenever there are 8 or more shifted in,

shift -= 8; // write them out (from the top, leaving any

out[index++] = // excess at the bottom for next iteration.

(byte) ((accum >> shift) & 0xff);

}

}

}

// if there is STILL something wrong we just have to throw up now!

if (index != out.length) {

throw new Error("Miscalculated data length (wrote " + index

  • " instead of " + out.length + “)”);

}

return out;

}

/**

  • 功能:编码文件

  • @param file 源文件

  • @author jiangshuai

*/

public static void encode(File file) throws IOException {

if (!file.exists()) {

System.exit(0);

} else {

byte[] decoded = readBytes(file);

char[] encoded = encode(decoded);

writeChars(file, encoded);

}

file = null;

}

/**

  • 功能:解码文件。

  • @param file 源文件

  • @throws IOException

  • @author jiangshuai

*/

public static void decode(File file) throws IOException {

总结

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。


经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

蚂蚁金服5面,总结了49个面试题,遇到的面试官都是P7级别以上

OException {

总结

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。


经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

[外链图片转存中…(img-WWKFIBRe-1714656430346)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值