对于这两个进口;
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
Access restriction: The type BASE64Decoder is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\rt.jar
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?
nIK*_*UNJ 123
转到窗口 - >首选项 - > Java - >编译器 - >错误/警告.
选择已弃用和受限制的API.将其更改为警告.
更改禁止和气馁参考并将其更改为警告.(或根据您的需要.)
use*_*421 61
该错误是由Eclipse配置引起的.您可以将其减少为警告.更好的是,使用不属于非公共API的Base64编码器.Apache Commons有一个,或者当你已经在Java 1.8上,然后使用java.util.Base64.
这个错误是因为您正在导入以下两个类 import sun.misc.BASE64Encoder; 导入 sun.misc.BASE64Decoder;。也许您正在使用该库的编码和解码,如下所示。
new BASE64Encoder().encode(encVal);
newBASE64Decoder().decodeBuffer(encryptedData);
Run Code Online (Sandbox Code Playgroud)
是的,您可以导入类,而不是 sun.misc.BASE64Encoder。现在
java.util.Base64更改之前的编码方法,如下所示:
encryptedData=Base64.getEncoder().encodeToString(encryptedByteArray);
Run Code Online (Sandbox Code Playgroud)
现在将之前的解码方法更改如下
byte[] base64DecodedData = Base64.getDecoder().decode(base64EncodedData);
Run Code Online (Sandbox Code Playgroud)
现在一切都完成了,您可以保存程序并运行。它将运行而不会显示任何错误。
是的,sun.misc.BASE64Decoder比较慢:比java.xml.bind.DatatypeConverter.parseBase64Binary()慢9倍,比org.apache.commons.codec.binary.Base64.decodeBase64()慢4倍,至少对于a Java 6 OSX上的小字符串.
以下是我使用的测试程序.在OSX上使用Java 1.6.0_43:
john:password = am9objpwYXNzd29yZA==
javax.xml took 373: john:password
apache took 612: john:password
sun took 2215: john:password
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这是commons-codec 1.4.随着1.7它似乎变慢:
javax.xml took 377: john:password
apache took 1681: john:password
sun took 2197: john:password
Run Code Online (Sandbox Code Playgroud)
没有测试Java 7或其他操作系统.
import javax.xml.bind.DatatypeConverter;
import org.apache.commons.codec.binary.Base64;
import java.io.IOException;
public class TestBase64 {
private static volatile String save = null;
public static void main(String argv[]) {
String teststr = "john:password";
String b64 = DatatypeConverter.printBase64Binary(teststr.getBytes());
System.out.println(teststr + " = " + b64);
try {
final int COUNT = 1000000;
long start;
start = System.currentTimeMillis();
for (int i=0; i<COUNT; ++i) {
save = new String(DatatypeConverter.parseBase64Binary(b64));
}
System.out.println("javax.xml took "+(System.currentTimeMillis()-start)+": "+save);
start = System.currentTimeMillis();
for (int i=0; i<COUNT; ++i) {
save = new String(Base64.decodeBase64(b64));
}
System.out.println("apache took "+(System.currentTimeMillis()-start)+": "+save);
sun.misc.BASE64Decoder dec = new sun.misc.BASE64Decoder();
start = System.currentTimeMillis();
for (int i=0; i<COUNT; ++i) {
save = new String(dec.decodeBuffer(b64));
}
System.out.println("sun took "+(System.currentTimeMillis()-start)+": "+save);
} catch (Exception e) {
System.out.println(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在jdk1.6.0_37上遇到了这个问题.这是我系统中唯一的JDE/JRE.我不知道为什么,但以下解决了这个问题:
项目 - >属性 - > Java构建路径 - >库
将单选按钮从执行环境切换到Alernate JRE.这选择了相同的jdk1.6.0_37,但在clean/build之后编译错误消失了.
也许从ram(3月16日9:00)回答的澄清 必须做点什么.
| 归档时间: |
|
| 查看次数: |
195491 次 |
| 最近记录: |