java - 使用DatatypeConverter.parseBase64Binary的异常

标签 java base64

我正在发送一个png数据的json字符串,我想将图像保存到磁盘。

jsonInputString= URLDecoder.decode( inputString, "UTF-8" );
jsonInputString= jsonInputString.substring(inputStrjsonInputStringing.indexOf(",")+1);
byte[] decodedBytes = DatatypeConverter.parseBase64Binary(jsonInputString);


jsonInputString清除后:

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

结果是

with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
 at javax.xml.bind.DatatypeConverter.parseBase64Binary(DatatypeConverter.java:296)


它是随机工作的,但是一直在尝试使它随机工作的时间很长。

来自Web客户端的字符串就这样出现了

 jsonInputString = ....toDataURL('image/png');
 jsonInputString = encodeURIComponent(jsonInputString );
 console.log(jsonInputString );


感谢您提供任何帮助,以帮助我了解为什么我的当前代码无法正常工作。

更新:
JDK 1.6
Eclipse靛蓝

最佳答案

DatatypeConverter.parseBase64Binary()不适用于Java SDK 1.6中超过65000的数据。在我使用Java SDK 1.6编写的applet中,我使用了parseBase64Binary(),它始终崩溃于大于64K的数据,并且对于较小的数据也能正常工作。

您可以使用Java SDK 1.6随附的BASE64Decoder

import sun.misc.BASE64Decoder;


然后像这样使用它:

BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);


如果添加其他软件包没有问题,则应使用apache commons Base64.decodeBase64()

关于java - 使用DatatypeConverter.parseBase64Binary的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18390886/

相关文章:

java - 如何知道一个列表有一个特定的索引?

bash - 如何从 base 64 编码字符串中获取十六进制 block ?

java.util.zip.ZipException : invalid literal/length code

javascript - 将图像从 Base64 解码为 jpg

javascript - 我应该选择什么函数来从 File 对象生成 base64 字符串?

java - 如何将代码从 java 1.3 升级到 1.5

java - 是否可以将引用类型动态传递给需要引用类型的对象实例?

java - GridBagLayout 如何工作?

java - HashMap.remove 和垃圾回收

java - Spring - 如何在集成测试中将图像插入数据库