Junit测试base64编码的字符串

时间:2013-05-02 23:26:19

标签: 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}==)$"));

提前致谢

1 个答案:

答案 0 :(得分:3)

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

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

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