sun.misc.BASE64Encoder存在的问题及其解决方法

深入理解Base64的用法和原理 Base64 编码使用 64 个可打印的 ASCII 字符来表示数据。这些字符包括大写字母A-Z(26 个)、小写字母a-z(26 个,但在标准 Base64 中通常使用大写)、数字0-9(10 个)、加号和斜杠。此外,为了支持 URL 和文件名,还有一个变种使用代替和代替。与编码表一样,解码表依赖于 Base64 字符集,包括大写字母A-Z、小写字母a-z(在标准 Base64 中通常不使用)、数字0-9、加号和斜杠。对于 URL 安全的 Base64,使用代替和代替。Java 的Base64。 阅读详情

问题背景:     
     最近在开发中用到了sun.misc.BASE64Encoder。发现两个问题: 
     其一、当编码的字节较长时,encode出来的字符串会自动加入\n\r进行自动换行。针对这个问题,原因是rfc规范规定76个字符换一次行。 
     其二、编码效率较低。 

解决办法:    
     1、重写BASE64Encoder: 

public class BASE64Encoder {

private static char[] codec_table = { 'A', 'B', 'C', 'D', 'E', 'F', 'G','H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T','U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g','h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't','u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6','7', '8', '9', '+', '/' };

public BASE64Encoder() {}

public static String encode(byte[] a) {

int totalBits = a.length * 8;

int nn = totalBits % 6;

int curPos = 0;//process bits

StringBuffer toReturn = new StringBuffer();

while (curPos < totalBits) {

int bytePos = curPos / 8;

switch (curPos % 8) {

case 0:

toReturn.append(codec_table[(a[bytePos] & 0xfc) >> 2]);

break;

case 2:

toReturn.append(codec_table[(a[bytePos] & 0x3f)]);

break;

case 4:

if (bytePos == a.length - 1) {

toReturn.append(codec_table[((a[bytePos] & 0x0f) << 2) & 0x3f]);

} else {

int pos = (((a[bytePos] & 0x0f) << 2) | ((a[bytePos + 1] & 0xc0) >> 6)) & 0x3f;

toReturn.append(codec_table[pos]);

}

break;

case 6:

if (bytePos == a.length - 1) {

toReturn.append(codec_table[((a[bytePos] & 0x03) << 4) & 0x3f]);

} else {

int pos = (((a[bytePos] & 0x03) << 4) | ((a[bytePos + 1] & 0xf0) >> 4)) & 0x3f;

toReturn.append(codec_table[pos]);

}

break;

default:

//never hanppen

break;

}

curPos+=6;

}

if(nn==2) {

toReturn.append("==");

} else if(nn==4) {

toReturn.append("=");

}

return toReturn.toString();

}

public static void main(String[] args) throws Exception {

BASE64Encoder encoder=new BASE64Encoder();

sun.misc.BASE64Encoder sunEncoder=new sun.misc.BASE64Encoder();

byte[] testBytes=new byte[1024*1024*2];

long start=System.currentTimeMillis();

for(int i=0;i<10;i++){

sunEncoder.encode(testBytes);

}

System.out.println("[sun encoder]use time :"+(System.currentTimeMillis()-start));

start=System.currentTimeMillis();

for(int i=0;i<10;i++) {

encoder.encode(testBytes);

}

System.out.println("[our encoder]use time :"+(System.currentTimeMillis()-start));

}

}

Android中使用sun.misc.BASE64Encoder 遇到的问题 Android 中java.long.NoClassDefFoundError: sun.misc.BASE64Encoder 一种解决方法 阅读详情

相关推荐

sun.misc.BASE64Encoder.jar包

安装了JDK 9以上版本,发现sun.misc.Base64Encoder和sun.misc.Base64Decoder无法使用。找不到导入的包此时将下面的包导入libs中就可以了

【sun.misc.BASE64Encoder报错】sun.misc.BASE64Encoder报错的三种解决方法_Eclipse

问题描述 sun.misc.BASE64Encoder在eclipse中使用报错。 原因分析: sun.misc.BASE64Encoder等类不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。但是在eclipse中直接使用却报错。在jdk1.9中就不存在了,但新版Eclipse(本人2022.2版)本身要求的jre较高,但项目使用的1.8版本,所以修改eclipse.ini会使软件打不开,但用它本身的就会版本比较高。 解决方案: 提示:本人使用网络上普遍的添加access/**的方法(即解

qq_41670382的博客 1万+

通义千问语言模型Qwen2.5架构详解

此外,将基于API的模型 Qwen-Plus 与领先的专有和开源模型进行了对比,包括 GPT4-o、Claude-3.5-Sonnet、Llama-3.1-405B和DeepSeek-V2.5。Qwen2.5-Math-72B-Instruct的整体性能超越了Qwen2-Math-72B-Instruct和GPT4-o,甚至是非常小的专业模型如 Qwen2.5-Math-1.5B-Instruct也能在与大型语言模型的竞争中取得高度竞争力的表现。近来也出现了明显的转向小型语言模型(SLMs)的趋势。

搏博的专栏 1万+

sun.misc.BASE64Encoder 不建议使用java.sun自带包中的内容

.

qq_44885775的博客 6208

别再搞混了!用示波器实测SVPWM:相电压、线电压、端电压波形到底长啥样?(附TI/ST官方笔记解读)

本文详细解析了SVPWM波形实测中的相电压、线电压和端电压的区别与测量技巧,结合TI/ST官方笔记,揭示了马鞍形波形的形成原理及常见误区。通过示波器实测案例,帮助电力电子工程师准确理解并应用这些关键概念,提升电机控制系统的调试效率。

weixin_30632883的博客 433

将机器人urdf模型转换为Mujoco环境下的mjcf模型

在使用gym环境进行人形模型站立训练的过程中,我想要将之前ros环境下的机器人urdf模型导入到mujoco环境下,这时候就需要将urdf模型转换为mujoco专用的mjcf模型。-AzureLoong.urdf是机器人模型(我这里使用青龙的模型);--custom_robot.xml是转换完成之后的机器人模型的名字和格式;包要求 Python 版本必须是 3.11 或更高),保证自己的其他训练环境和依赖不被干扰。首先将meshes文件迁移到需要输出的目录下,然后再运行转换命令。最后就可以成功输出了。

weixin_44334573的博客 3760

android平台解决找不到sun.misc.BASE64Enocder的问题

java.long.NoClassDefFoundError: sun.misc.BASE64Encoder 在与服务器端交互时,服务器端采用sun.misc.BASE64Encoder加密后,Android端找不到这个API。 其API在jdk 1.6下的rt.jar中,有45.6M之巨大。 我们需要使用则需要将其源码抽取出来单独放到客户端。 http://files.c

zhan10001的博客 2645

如何用AP525 测试输入信号的相位,频响,延时,Pop和卡顿

假设信号不是从AP输出,是功放或者其他的播放设备输出的信号,接入到AP525的输入端。

帮助100万人颠覆负面潜意识,实现人生蜕变,培养1万名潜意识开发导师 2406

JDK1.6_023的版本及升级注意事项

所有1.6系列及1.6.0_23以下的版本,存在着String.indexOf,String.contains等方法功能不正常的bug,bug地址: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6935535 在某种情况下,hotspot编译出的代码会不正确执行,升级到jdk1.6.0_25可以解决这个问题。 可在升级的地方,有一个已

冯立彬的博客 3461

vivado Block Design 设计 .tcl 文件使用,导出,修改,添加方式

在vivado中生成 Block Design可以导出tcl文件进行保存(体积小),或者在别的版本vivado中打开(版本互通),这是一个非常好的功能。另外GitHub中很多项目都是采用这种方式上传的,学会如何使用可以快速修改历程项目。

2203_75345038的博客 2494

统信UOS/麒麟ARM桌面版,不联网也能用Docker部署MySQL 5.7(离线部署详解)

本文详细介绍了在统信UOS/银河麒麟ARM桌面版系统中,如何离线部署MySQL 5.7的完整流程。通过Docker技术实现环境隔离和依赖封装,解决了封闭网络环境下的部署难题,包括资源准备、系统配置、容器化部署及安全加固等关键步骤,为政企和科研场景提供实用解决方案。

weixin_30892037的博客 230

解决rt.jar下sun.misc.BASE64Encoder的依赖

1. 描述 当使用maven进行打war包时,可能会出现cannot find symbol或sun.misc.BASE64Encoder找不到jar包。 2. 分析 原因在于BASE64Encoder/BASE64Decoder类在sun.misc包下,是sun公司的内部方法,后期有删除的潜在可能,建议使用apache commons.codec下的Base64替代或者jdk自带的java.u...

小影 2万+

3、流程引擎下载安装与部署

camunda有多种使用方式,此处先使用独立平台的方式部署引擎,这种用法适合分布式,微服务化,多语言异构系统的使用方式。

leyoliu的博客 5522

IDEA解决无法找到sun.misc.BASE64Encoder的jar包的解决方法

idea中可能会出现没有sun.misc.BASE64Encoder的jar包。但是64位编码却需要用到.BASE64Encoder。这种问题一般在比较新的jdk12的时候会出现,为了解决这个问题,有以下两种方法: 1.JDK由12改为8; 2.更改导入的包; 下面详细说一下第二种方法: 1.替换原有jar包 原有的包导入方式为: import sun.misc.BASE64Encoder; 改...

baidu_38769016的博客 9651

[Dify] 多步对话流程的实现技巧:构建连贯自然的多轮交互系统

摘要:本文探讨了AI系统中实现多轮对话的核心技术与应用方法。文章首先分析了多步对话的典型场景(如机票预订、财务报告生成)及其价值,提出了Dify平台实现该功能的三大机制:变量系统、条件控制和状态管理。随后详细介绍了顺序型、条件型和确认型三种基本对话模式,并通过"会议预约助手"案例展示了实际应用流程。文章还提供了提示词设计、变量引用等实用建议,并强调多轮对话成功的关键在于清晰的结构设计而非单纯依赖模型能力,最终实现自然流畅的人机交互体验。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1343

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

在Idea解决找不到sun.misc.BASE64Encoder及sun.misc.BASE64Decoder找不到包

在Idea解决找不到sun.misc.BASE64Encoder及sun.misc.BASE64Decoder找不到包的解决方法 报错原因: JDK从1.8升级到9.0.1后sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用 原因分析: ​ 参看官网,发现JDK中的lib\tools.jar和JRE中的lib\rt.jar已从Java S...

qq_16977023的博客 9561

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

替换sun.misc.BASE64Encoder

替换sun.misc.BASE64Encoder 现象: 一直以来Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的 这次换了JDK后发现提示找不到该类,网上有办法说重新配置jre就行了,但事实上不是这么简单的,在我测试后发现,这是要看配置的jre的类型是execution environment(执行环境),还是al

pplsunny----舞动青春 4216

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

idea解决 sun.misc.BASE64Encoder 找不到jar包的解决方法

IDEA解决sun.misc.BASE64Encoder找不到jar包的解决方法因此解决办法1可以为将 jdk 降为1.7,就可以使用了,另一种解决方案就是使用其他的类来替代他下面是解决方案2的介绍。 import sun.misc.BASE64Encoder; import sun.misc.BASE64Decoder; 在使用idea运行项目时,发现报错提示sun.misc.BASE64Encoder找不到,因此上网看了一下网上的说明,说是这两个类是jdk自带的两个类,但是好像在jdk1.8之后删去了这

qq_40600414的博客 3061

sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用【解决办法】

sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用【解决办法】 一、问题描述 原因分析 二、解决办法 1、替换JDK公共API 2、切换JDK版本 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!

小啊呜的博客 8746

Eclipse 出现sun/misc/BASE64Encoder无法编译的问题

新建工程编译的时候出现以下内容: Errors occurred during the build.Errors running builder ‘Android Package Builder’ on project ‘xxx’. sun/misc/BASE64Encoder 找了很多种方法例如修改jre系统库,降低JDK版本为JDK1.6,JDK1.7。都无法解决问题。 最后找到方法就是...

scklon的博客 5119

sun.misc.BASE64Encoder无法找到解决方法

1.替换原有jar包 原有的包导入方式为: import sun.misc.BASE64Encoder; 改为: import org.apache.commons.codec.binary.Base64; pom文件中加入的依赖: <!-- https://mvnrepository.com/artifact/org.apache.directory.studio/org.apache.commons.codec --> <dependency>

qq_28326501的博客 1523

import sun.misc.BASE64Encoder 报错

导入项目后 BASE64Encoder报错 错误信息:import sun.misc.BASE64Encoder 报错 解决方法: 把import sun.misc.BASE64Encoder 换成 import java.util.Base64; 将代码中的BASE64Encoder encoder = new BASE64Encoder();换成 Base64.Encoder encoder = Base64.getEncoder(); 将代码中的encode()方法换成encodeToString

weixin_45941832的博客 7596

sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用

转载的出处:https://www.cnblogs.com/wsygdb/p/7890237.html 最近研究项目,JDK是9.0.4,在IDEA上配置好JDK为9后,发现项目有错,查看发现sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用。 错误提示: Error:(29, 16) java: 找不到符号 符号: 类 BASE64Decoder 位置: 程序包 sun.misc 解决方法: 在和报错同目录下创建一个Base64.class,将

Apikaqiu的博客 2432
上一篇: idea Maven enforcer 插件 检查代码冲突
下一篇: uniapp+vue3+ts+picker 实现二级联动效果
breakwhile2
博客等级 码龄18年 26粉丝 21原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值