使用Base64解码媒体资源时出错Java8时问题,怎么解决

Java下BASE64编解码及myeclipse控制台中文乱码解决
下面是java下BASE64的编码与解码示例程序:
--------------------------------------------------------
java.io.BufferedR
java.io.IOE
java.io.InputStreamR
sun.misc.BASE64D
sun.misc.BASE64E
Base64Test
main(String[]
args) throws
IOException
&&&&&&&&&&
String nextLine = System.getProperty("line.separator");//定义跨平台级的换行符
&&&&&&&&&&
&&&&&&&&&&
//---------编码演示-------------------
&&&&&&&&&&
BufferedReader in = new
BufferedReader((new
InputStreamReader(System.in)));
&&&&&&&&&&
System.out.print("请输入要编码的字符串:");
&&&&&&&&&&
String str = in.readLine();
&&&&&&&&&&
BASE64Encoder encoder = new
BASE64Encoder();
&&&&&&&&&&
System.out.println("您输入的字符串为:"+str+nextLine+"
编码后为:"+encoder.encode(str.getBytes()));
&&&&&&&&&&
&&&&&&&&&&
//---------解码演示-------------------
&&&&&&&&&&
BASE64Decoder decoder = new
BASE64Decoder();
&&&&&&&&&&
System.out.print("请输入要解码的字符串:");
&&&&&&&&&&
String in2 = new
BufferedReader(new
InputStreamReader(System.in)).readLine();
&&&&&&&&&&
System.out.println("解码后为:"+new
String(decoder.decodeBuffer(in2)));
-------------------------------------------------------------------
注意:如果使用myeclipse的控制台输入中文,则可能会导致接收到的数据乱码,解决方法:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。BASE64 编码是一种常用的字符编码,在很多地方都会用到。但base64不是安全领域下的加密解密算法。能起到安全作用的效果很差,而且很容易破解,他核心作用应该是传输数据的正确性,有些网关或系统只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法,而且base64特别适合在http,mime协议下快速传输数据。
JDK里面实现Base64的API
在JDK1.6之前,JDK核心类一直没有Base64的实现类,有人建议用Sun/Oracle JDK里面的sun.misc.BASE64Encoder 和 sun.misc.BASE64Decoder,使用它们的优点就是不需要依赖第三方类库,缺点就是可能在未来版本会被删除(用maven编译会发出警告),而且性能不佳,后面会有性能测试。
JDK1.6中添加了另一个Base64的实现,javax.xml.bind.DatatypeConverter两个静态方法parseBase64Binary 和 printBase64Binary,隐藏在javax.xml.bind包下面,不被很多开发者知道。
在Java 8在java.util包下面实现了BASE64编解码API,而且性能不俗,API也简单易懂,下面展示下这个类的使用例子。
java.util.Base64
该类提供了一套静态方法获取下面三种BASE64编解码器:
1)Basic编码:是标准的BASE64编码,用于处理常规的需求
String&asB64&=&Base64.getEncoder().encodeToString(&some&string&.getBytes(&utf-8&));
System.out.println(asB64);&
byte[]&asBytes&=&Base64.getDecoder().decode(&c29tZSBzdHJpbmc=&);
System.out.println(new&String(asBytes,&&utf-8&));&
2)URL编码:使用下划线替换URL里面的反斜线“/”
String&urlEncoded&=&Base64.getUrlEncoder().encodeToString(&subjects?abcd&.getBytes(&utf-8&));
System.out.println(&Using&URL&Alphabet:&&&+&urlEncoded);
Using&URL&Alphabet:&c3ViamVjdHM_YWJjZA==
3)MIME编码:使用基本的字母数字产生BASE64输出,而且对MIME格式友好:每一行输出不超过76个字符,而且每行以“\r\n”符结束。
StringBuilder&sb&=&new&StringBuilder();
for&(int&t&=&0;&t&&&10;&++t)&{
&&sb.append(UUID.randomUUID().toString());
byte[]&toEncode&=&sb.toString().getBytes(&utf-8&);
String&mimeEncoded&=&Base64.getMimeEncoder().encodeToString(toEncode);
System.out.println(mimeEncoded);
第三方实现Base64的API
首先便是常用的Apache Commons Codec library里面的mons.codec.binary.Base64;
第二个便是Google Guava库里面的mon.io.BaseEncoding.base64() 这个静态方法;
第三个是net.iharder.Base64,这个jar包就一个类;
最后一个,号称Base64编码速度最快的MigBase64,而且是10年前的实现,到现在是否能保持这个称号,测一测便知道;
Base64编码性能测试
上面讲了一共7种实现Base64编码,Jdk里面3种,第三方实现4种,一旦有选择,则有必要将他们进行一次高低对比,性能测试是最直接的方式
首先来定义两个接口
private&static&interface&Base64Codec
&&&&&&&&public&String&encode(final&byte[]&data);
&&&&&&&&public&byte[]&decode(final&String&base64)&throws&IOE
&&&&private&static&interface&Base64ByteCodec
&&&&&&&&public&byte[]&encodeBytes(final&byte[]&data);
&&&&&&&&public&byte[]&decodeBytes(final&byte[]&base64)&throws&IOE
两个接口区别就是其中一个接口方法参数接收byte数组,返回byte数组,因为byte-&byte相比String-&byte或者byte-&String性能上会快一点,所以区分两组来测试
private&static&final&Base64Codec[]&m_codecs&=&{&new&GuavaImpl(),&new&JavaXmlImpl(),
&&&&&&&&new&Java8Impl(),&new&SunImpl(),&new&ApacheImpl(),new&MiGBase64Impl(),new&IHarderImpl()&};
private&static&final&Base64ByteCodec[]&m_byteCodecs&=&{
&&&&&&&&new&ApacheImpl(),&new&Java8Impl(),new&MiGBase64Impl(),new&IHarderImpl()&};
从上面看出,其中支持byte-&byte只有4中API;
7个Base64的实现类
private&static&class&Java8Impl&implements&Base64Codec,&Base64ByteCodec
&&&&&&&&private&final&Base64.Decoder&m_decoder&=&Base64.getDecoder();
&&&&&&&&private&final&Base64.Encoder&m_encoder&=&Base64.getEncoder();
&&&&&&&&@Override
&&&&&&&&public&String&encode(byte[]&data)&{
&&&&&&&&&&&&return&m_encoder.encodeToString(data);
&&&&&&&&@Override
&&&&&&&&public&byte[]&decode(String&base64)&throws&IOException&{
&&&&&&&&&&&&return&m_decoder.decode(base64);
&&&&&&&&public&byte[]&encodeBytes(byte[]&data)&{
&&&&&&&&&&&&return&m_encoder.encode(&data&);
&&&&&&&&public&byte[]&decodeBytes(byte[]&base64)&throws&IOException&{
&&&&&&&&&&&&return&m_decoder.decode(&base64&);
&&&&private&static&class&JavaXmlImpl&implements&Base64Codec&
&&&&&&&&public&String&encode(byte[]&data)&{
&&&&&&&&&&&&return&DatatypeConverter.printBase64Binary(&data&);
&&&&&&&&public&byte[]&decode(String&base64)&throws&IOException&{
&&&&&&&&&&&&return&DatatypeConverter.parseBase64Binary(&base64&);
..............
后面代码基本就是各种API实现Base64的代码了,就不详细列出。
主要测试手段是,生成100M的随机数,分成100byte或者1000byte的块,然后将他们分别编码和解码,记录时间,如下方法
private&static&TestResult&testByteCodec(&final&Base64ByteCodec&codec,&final&List&byte[]&&buffers&)&throws&IOException&{
&&&&&&&&final&List&byte[]&&encoded&=&new&ArrayList&byte[]&(&buffers.size()&);
&&&&&&&&final&long&start&=&System.currentTimeMillis();
&&&&&&&&for&(&final&byte[]&buf&:&buffers&)
&&&&&&&&&&&&encoded.add(&codec.encodeBytes(buf)&);
&&&&&&&&final&long&encodeTime&=&System.currentTimeMillis()&-&
&&&&&&&&final&List&byte[]&&result&=&new&ArrayList&byte[]&(&buffers.size()&);
&&&&&&&&final&long&start2&=&System.currentTimeMillis();
&&&&&&&&for&(&final&byte[]&ar&:&encoded&)
&&&&&&&&&&&&result.add(&codec.decodeBytes(ar)&);
&&&&&&&&final&long&decodeTime&=&System.currentTimeMillis()&-&start2;
&&&&&&&&for&(&int&i&=&0;&i&&&buffers.size();&++i&)
&&&&&&&&&&&&if&(&!Arrays.equals(&buffers.get(&i&),&result.get(&i&)&)&)
&&&&&&&&&&&&&&&&System.out.println(&&Diff&at&pos&=&&&+&i&);
&&&&&&&&return&new&TestResult(&encodeTime&/&1000.0,&decodeTime&/&1000.0&);
jvm参数:-Xms512m -Xmx4G
一切都很明显了,从上面看出,sun的表现不是很好,IHarder和MigBase64性能可以接受,传说MigBase64性能第一,那也是过去了,在这次测试结果中,新的java8 base64运行速度最好,javaXml表现次之。
如果你需要一个性能好,可靠的Base64编解码器,不要找JDK外面的了,java8里面的java.util.Base64以及java6中隐藏很深的javax.xml.bind.DatatypeConverter,他们两个都是不错的选择。
from:http://my.oschina.net/benhaile/blog/267738
还有很多Java8新特性比如:
OOM:Permgen说再见&元空间(MetaSpace)一种新的内存空间诞生
StampedLock将是解决同步问题的新宠
Nashorn :新犀牛 (java8新一代的javascript引擎)
JavaFX 8新特性
参考:http://my.oschina.net/benhaile/blog?disp=1&catalog=410404&sort=time&p=1&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:353595次
积分:5862
积分:5862
排名:第4423名
原创:200篇
转载:95篇
评论:64条
阅读:10772
阅读:5507
阅读:16548
(1)(3)(4)(28)(4)(2)(12)(12)(11)(9)(1)(4)(1)(1)(1)(5)(5)(12)(13)(31)(13)(13)(18)(8)(2)(2)(11)(12)(21)(35)问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
在那些解码网站上是解码出来的,但是在安卓解不出来,不知道为什么??
求熟悉的帮破一下,这个东西搞了一个多少时....搞不懂,都同样的代码,怎么就不行呢?
提示错误:是不是在java有什么特殊情况解码呢?这乱码在网站都是可以解出来
java.lang.IllegalArgumentException: bad base-64
package china.
import android.support.v7.app.AppCompatA
import android.os.B
import android.util.Base64;
import android.util.L
public class MainActivity extends AppCompatActivity {
String context = "WzAwOjAxLjQ2XeS9nOivjTrpu4TlrrbpqbkNClswMDowMi41MV3kvZzmm7I66buE5a626am5DQpbMDA6MzYuODVd5LuN5piv6Zuo5aScDQpbMDA6MzguODZd5Yed5pyb56qX5aSW5rKJ6buY55qE5aSp6ZmFDQpbMDA6NDMuMjZd6Zeu6IuN5aSp5Y+v5Lya55+l5b+D6YeM55qE5oSf6KeJDQpbMDA6NTIuOTZd6ZqP552A5bKB5pyIDQpbMDA6NTQuNjdd5peg5bC954ix5b+16JeP5Zyo5LqO5b+D6YeMDQpbMDA6NTkuMDNd6LGh5Yaw5bCB55qE55y85YWJ5aSx5Y675LqG5pa55ZCRDQpbMDE6MDguNDRd6K6p6Zuo54K56L276L2755qE5rSS6L+HDQpbMDE6MTEuOTdd5by65oqK5b+n6YOB5YaN5o6p55uWDQpbMDE6MTUuMzFd5YOP56KO5pif6Zeq6Zeq5LqO5aSp56m65Y+r5ZSk5L2gDQpbMDE6MjYuNzBd6YGl5pyb55u85pybDQpbMDE6MjguMjBd6IO95YOP5riF6aOO6Zmq5Ly05aW56aOY5Y67DQpbMDE6MzIuNjNd6K6p5a2k5Y2V55qE6IeC5byv5LiA5YaN5oqx57Sn5L2gDQpbMDE6NDIuNDNd5Zue5pyb5b6A5pel5aaC6Zu+5Ly85qKmDQpbMDE6NDUuODhd5peg5aWI55qE6L275Y+55piv5aW555qE5qyi56yR5aOwDQpbMDE6NTIuNzhd6aOO5Ly86L275ZC56L+HDQpbMDE6NTcuOTFd6K6p6Zuo54K56L276L2755qE5rSS6L+HDQpbMDI6MDEuMjdd5by65oqK5b+n6YOB5YaN5o6p55uWDQpbMDI6MDYuNzJd5YOP56KO5pif6Zeq6Zeq5LqO5aSp56m65Y+r5ZSk5L2gDQpbMDI6MTMuOTZd5q+P5aSp5aSa5LmI5aSa5LmI55qE6ZyA6KaBDQpbMDI6MTcuNjZd5rC46L+c5LiO5L2g5oqx5oul552ADQpbMDI6MjEuMjVd5b+Y5o6J5LiW6Ze05LiA5YiH55eb6Ium5oKy5ZOADQpbMDI6MjcuNzhd57q15L2/5YiG5byA5YiG5byA5aSa5LmI6L+cDQpbMDI6MzEuNzBd5Lmf5Lya5ZCs5Yiw5L2g5ZG85ZSkDQpbMDI6MzUuMjhd5pyf5b6F5oiR6L+Z5LiA55Sf5YaN5Lya5L2gDQpbMDM6MjcuNzld5q+P5aSp5aSa5LmI5aSa5LmI55qE6ZyA6KaBDQpbMDM6MzEuNzRd5rC46L+c5LiO5L2g5oqx5oul552ADQpbMDM6MzUuNDNd5b+Y5o6J5LiW6Ze05LiA5YiH55eb6Ium5oKy5ZOADQpbMDM6NDEuOTJd57q15L2/5YiG5byA5YiG5byA5aSa5LmI6L+cDQpbMDM6NDUuOTRd5Lmf5Lya5ZCs5Yiw5L2g5ZG85ZSkDQpbMDM6NDkuNDBd5pyf5b6F5oiR6L+Z5LiA55Sf5YaN5Lya5L2gDQpbMDM6NTYuMThd5q+P5aSp5aSa5LmI5aSa5LmI55qE6ZyA6KaBDQpbMDM6NTkuOTNd5rC46L+c5LiO5L2g5oqx5oul552ADQpbMDQ6MDMuNDZd5b+Y5o6J5LiW6Ze05LiA5YiH55eb6Ium5oKy5ZOADQpbMDQ6MTAuMjFd57q15L2/5YiG5byA5YiG5byA5aSa5LmI6L+cDQpbMDQ6MTQuMDZd5Lmf5Lya5ZCs5Yiw5L2g5ZG85ZSkDQpbMDQ6MTcuNjJd5pyf5b6F5oiR6L+Z5LiA55Sf5YaN5Lya5L2gDQpbMDQ6MjguMjFd5LuN5piv6Zuo5aScDQpbMDQ6MjkuOTZd5Yed5pyb56qX5aSW5rKJ6buY55qE5aSp6ZmFDQpbMDQ6MzQuMzNd6Zeu6IuN5aSp5Y+v5Lya55+l5b+D6YeM55qE5oSf6KeJDQpbMDQ6NDcuODJd6ZqP552A5bKB5pyIDQpbMDQ6NDkuMzdd5peg5bC954ix5b+16JeP5Zyo5LqO5b+D6YeMDQpbMDQ6NTMuNjNd6LGh5Yaw5bCB55qE55y85YWJ5aSx5Y675LqG5pa55ZCRDQo=";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
byte[] result = Base64.decode(context.toString(), Base64.DEFAULT);
String ss = new String(result);
Log.d("ddd", ss);
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
Android端:编码:
String oneBaseEncoder = Base64.encode(msg.getBytes());
String oneBaseDecoder = new String(Base64.decode(msg));
JAVA WEB端:编码:
String oneBaseEncoder = new BASE64Encoder().encode(jsonString.getBytes("utf-8"));
String oneBaseDecoder = new String(new BASE64Decoder().decodeBuffer(jsonString));
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
Base64.decode的flags的参数不对:
byte[] result = Base64.decode(context.toString(), Base64.NO_PADDING);
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
真解不了,log一点内容也没有.....有谁能帮帮吗?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你删掉等号。或者加上一个等号好像android这里解码 要么不要等号 要么两个等号 ,我换了 no PADDING 不行
该答案已被忽略,原因:
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:}

我要回帖

更多关于 解码者什么时候上映 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信