java - base64 编码字符串的 Junit 测试

标签 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());

它似乎正在对其进行编码,但我需要通过编写一个 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}==)$"));

提前致谢

最佳答案

默认 Base64OutputStream 使用 CHUNK_SIZE = 76 和 CHUNK_SEPARATOR = {'\r', '\n'}。 您用来测试给定字符串是否为 BASE64 编码的正则表达式并不能说明这一点。

匹配分块 BASE64(给定 block 大小 64 和分隔符\r\n)字符串的正则表达式可能如下所示:

"^(([\\w+/]{4}){19}\r\n)*(([\\w+/]{4})*([\\w+/]{4}|[\\w+/]{3}=|[\\w+/]{2}==))$"

关于java - base64 编码字符串的 Junit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16349346/

相关文章:

java - SimpleDateFormat 的另一个不可解析的日期

regex - 如何在 swift 项目中查找非本地化字符串

.NET Regex 重叠匹配数

java - 为什么这个 Mockito 测试失败了?

java - JUnit 预期异常未按预期工作

java - ListView 未导航到其他 Activity

java - 在 jpanel 上绘制字符串

java - 使用 Java 对 C++ 代码进行单元测试

java - Java 正则表达式中的空格

maven - 使用 Maven 运行时的 log4j 设置与从 Eclipse 运行时不同