nix*_*get 5 java regex junit base64 assert
我正在尝试使用Apache的PDFBox读取PDF的内容并在base64中对其进行编码,以便将其流式传输到其他地方.要对其进行编码,我使用Apache commons Base64OutputStream类.像这样,
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
Base64OutputStream base64Output = new Base64OutputStream(byteOutput);
List pages = pdfDocument.getDocumentCatalog().getAllPages();
Iterator iter = pages.iterator();
while (iter.hasNext()) {
PDPage page = (PDPage) iter.next();
PDResources resources = page.getResources();
Map<String, PDXObjectImage> pageImages = resources.getImages();
if (pageImages != null) {
Iterator imageIter = pageImages.keySet().iterator();
while (imageIter.hasNext()) {
String key = (String) imageIter.next();
PDXObjectImage image = (PDXObjectImage) pageImages
.get(key);
image.write2OutputStream(base64Output);
}
}
}
String base64 = new String(byteOutput.toByteArray());
Run Code Online (Sandbox Code Playgroud)
它似乎是编码它但我需要通过编写junit测试验证它来验证base64字符串.以下似乎没有通过它.有什么想法吗 ?
assertTrue(content
.matches("^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$"));
Run Code Online (Sandbox Code Playgroud)
提前致谢
默认情况下Base64OutputStream使用 CHUNK_SIZE = 76 和 CHUNK_SEPARATOR = {'\r', '\n'}。用于测试给定字符串是否为 BASE64 编码的正则表达式无法解释这一点。
匹配分块 BASE64(给定块大小 64 和分隔符 \r\n)字符串的正则表达式可能如下所示:
"^(([\\w+/]{4}){19}\r\n)*(([\\w+/]{4})*([\\w+/]{4}|[\\w+/]{3}=|[\\w+/]{2}==))$"
Run Code Online (Sandbox Code Playgroud)