Eri*_*son 0 java stringbuilder base64 blob
我基本上有完全相反的问题
似乎旧的Java Base64实用程序在返回字符串时总是每76个字符添加新行,但使用以下代码,我不会得到我需要的那些中断.
Path path = Paths.get(file);
byte[] data = Files.readAllBytes(path);
String txt= Base64.getEncoder().encodeToString(data);
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法可以告诉编码器添加换行符?
我已经尝试实现一个stringbuilder来插入换行符,但它最终改变了整个输出(我将文本从java控制台复制到HxD编辑器,并与我已知的工作'BLOB'与换行符进行比较).
String txt= Base64.getEncoder().encodeToString(data);
//Byte code for newline
byte b1 = 0x0D;
byte b2 = 0x0A;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < txt.length(); i++) {
if (i > 0 && (i % 76 == 0)) {
sb.append((char)b1);
sb.append((char)b2);
}
sb.append(txt.charAt(i));
}
Run Code Online (Sandbox Code Playgroud)
编辑(回答问题):
这不是最简单的解释,但是当我不使用字符串构建器时,编码的输出将如下所示:
AAAAPAog4lBVgGJrT2b + mQVicHN3d //////// 3hhcDJiLWVtMjUwLWVtMjUwLWRldjA0NTUAAAAAAA
但我希望它看起来像这样:
AAAAPAog4lBVgGJrT2b + mQVicHN3d //////// 3hhcDJiLWVtMjUwLWVtMjUwLWRldjA0NTUAAAAA..AA
如您所见,".."表示0x0D和0X0A或换行符,它在第76个字符处插入(这是旧base64输出的内容).
但是,当我在第76个字符后追加字节b1和b2(换行符)时,输出变为:
BPwAFHwA0CUFoG8AgDRCAAIlQgAAJUIAAhUfNEIAAiUkmw/0fADQFSInART/ADUlfADQFQE0fADQ ..
所以看起来".."在正确的位置,但它之前的一切都是不同的.
谢谢!
你想要的是getMimeEncoder:
哑剧
使用RFC 2045的表1中指定的"Base64 Alphabet"进行编码和解码操作.编码输出必须以不超过76个字符的行表示,并使用回车符'\ r',后面紧跟一个换行符'\n'作为行分隔符.没有行分隔符添加到编码输出的末尾.在解码操作中将忽略base64字母表中未找到的所有行分隔符或其他字符.
(强调我的)
请注意,编码方案与基本编码器相同getEncoder- 它们都来自RFC 2045.