Base64 无法将字符串解码为字节数组
Base64 Failed to Decode String to Byte Array
我尝试使用 Base64
将 string
解码为字节数组。但它 returned null
。这是代码:
LZW lzw = new LZW();
String enkripEmbedFileString = Base64.encode(byteFile);
List<Short> compressed = lzw.compress(enkripEmbedFileString);
String kompress = "";
Iterator<Short> compressIterator = compressed.iterator();
while (compressIterator.hasNext()) {
String sch = compressIterator.next().toString();
int in = Integer.parseInt(sch);
char ch = (char) in;
kompress = kompress + ch;
}
byteFile = Base64.decode(kompress);
我在此代码下方的代码的最后一行调用 "byteFile" 变量,它抛出 NullPointerException
。
我检查了 "kompress" 变量,它不为空。它包含一个 string
.
所有你需要知道的是,使用该代码我使用 LZW 压缩一个字符串,它需要字符串作为参数和 returns List<Short>
。而且,我将 List<Short>
转换为带有您可以看到的循环的字符串。
问题是,为什么用LZW修改String后,Base64无法将String
转成byte[]
?
然而,如果我先解压字符串,然后 return 将解压后的字符串用 Base64 转换为 byte[],则没有问题。有用。这是有效的代码:
//LZW Compress
LZW lzw = new LZW();
String enkripEmbedFileString = Base64.encode(byteFile);
List<Short> compressed = lzw.compress(enkripEmbedFileString);
String kompress = "";
Iterator<Short> compressIterator = compressed.iterator();
while (compressIterator.hasNext()) {
String sch = compressIterator.next().toString();
int in = Integer.parseInt(sch);
char ch = (char) in;
kompress = kompress + ch;
}
//Decompress
List<Short> kompressback = back(kompress);
String decompressed = decompress(kompressback);
byteFile = Base64.decode(decompressed);
请给我一个解释。我的错在哪里?
Base64 decode 只能应用于包含 Base64 encoded 数据的字符串。由于您编码然后压缩,结果不是 Base64。当您看到首先解压缩数据允许您然后解码 Base64 字符串时,您自己证明了这一点。
我尝试使用 Base64
将 string
解码为字节数组。但它 returned null
。这是代码:
LZW lzw = new LZW();
String enkripEmbedFileString = Base64.encode(byteFile);
List<Short> compressed = lzw.compress(enkripEmbedFileString);
String kompress = "";
Iterator<Short> compressIterator = compressed.iterator();
while (compressIterator.hasNext()) {
String sch = compressIterator.next().toString();
int in = Integer.parseInt(sch);
char ch = (char) in;
kompress = kompress + ch;
}
byteFile = Base64.decode(kompress);
我在此代码下方的代码的最后一行调用 "byteFile" 变量,它抛出 NullPointerException
。
我检查了 "kompress" 变量,它不为空。它包含一个 string
.
所有你需要知道的是,使用该代码我使用 LZW 压缩一个字符串,它需要字符串作为参数和 returns List<Short>
。而且,我将 List<Short>
转换为带有您可以看到的循环的字符串。
问题是,为什么用LZW修改String后,Base64无法将String
转成byte[]
?
然而,如果我先解压字符串,然后 return 将解压后的字符串用 Base64 转换为 byte[],则没有问题。有用。这是有效的代码:
//LZW Compress
LZW lzw = new LZW();
String enkripEmbedFileString = Base64.encode(byteFile);
List<Short> compressed = lzw.compress(enkripEmbedFileString);
String kompress = "";
Iterator<Short> compressIterator = compressed.iterator();
while (compressIterator.hasNext()) {
String sch = compressIterator.next().toString();
int in = Integer.parseInt(sch);
char ch = (char) in;
kompress = kompress + ch;
}
//Decompress
List<Short> kompressback = back(kompress);
String decompressed = decompress(kompressback);
byteFile = Base64.decode(decompressed);
请给我一个解释。我的错在哪里?
Base64 decode 只能应用于包含 Base64 encoded 数据的字符串。由于您编码然后压缩,结果不是 Base64。当您看到首先解压缩数据允许您然后解码 Base64 字符串时,您自己证明了这一点。