如何检查"字节[] b" (持有文件内容)是否在base64中编码..?在java中

时间:2016-05-17 12:22:10

标签: java

这里我有一个代码接受字节数组中的文件内容,我想检查它是否是base64格式,然后再将其转换为base64并返回..任何人都可以帮我这里

import sun.misc.BASE64Encoder;
public static String encodeInByteArray(byte[] b)
  {
    BASE64Encoder encoder = new BASE64Encoder();
    return encoder.encode(b);
  }

以下是我尝试检查base64格式的代码:

import sun.misc.BASE64Encoder;
import java.util.regex.Pattern;
public class Encoder
{
public static String encodeInByteArray(byte[] b)
  {
      String regex =
                "([A-Za-z0-9+/]{4})*"+
                "([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)";
        Pattern patron = Pattern.compile(regex);
        String s=b.toString(); 
        if (!patron.matcher(s).matches()){

    BASE64Encoder encoder = new BASE64Encoder();
    return encoder.encode(b);
        }
        else 
            return s;
  }

  public static void main(String [] args) throws FileNotFoundException
  {
      FileInputStream fs= new FileInputStream("Sample.pdf");
      String s= fs.toString();
      byte[] b = s.getBytes();
      encodeInByteArray(b);
  }
}

3 个答案:

答案 0 :(得分:2)

调用b.toString()并不能达到您所期望的效果 - 结果字符串将类似[B@106d69c,因为数组不会覆盖toString。 (以类似的方式,调用fs.toString()不会以字符串形式提供文件内容。

要从String获取byte[],请使用构造函数:

new String(b)

但是你可能想要指定一个特定的字符集,例如:

new String(b, StandardCharsets.ISO_8859_1)

否则您可能会得到不同的结果,具体取决于您的JVM配置。

答案 1 :(得分:1)

您可以解析文件的第一个解决方案,或者部分解析文件(以节省资源)并确定某行是否为base64编码。有关String base64编码检查,请参阅此答案。

How to check whether the string is base64 encoded or not

第二个解决方案是,如果你完全控制文件保存和编码,你可以在文件的头部或尾部放置一个字节,如果它的base64是否编码,这应该比上面更快溶液

答案 2 :(得分:0)

您可以使用apache的commons-codec中的Base64.isBase64(byte[] arrayOctet)

请注意,documentation中所述的空格当前有效。