Java 如何检查a";字节[]b";(保存文件内容)是否用base64编码。。?在爪哇

Java 如何检查a";字节[]b";(保存文件内容)是否用base64编码。。?在爪哇,java,Java,这里我有一个代码,它接受字节数组中的文件内容,在将其转换为base64并返回之前,我想检查它是否为base64格式。。有人能帮我吗 import sun.misc.BASE64Encoder; public static String encodeInByteArray(byte[] b) { BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(b); } 下面是我尝试检查base64格式

这里我有一个代码,它接受字节数组中的文件内容,在将其转换为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);
  }
}

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

第二种解决方案是,如果您完全控制了文件的保存和编码,您可以在文件的开头或结尾放置一个字节,指示其base64是否已编码,这应该比上述解决方案更快。

调用
b.toString()
没有达到预期效果-结果字符串类似于
[B@106d69c
,因为数组不重写
toString
(类似地,调用
fs.toString()
不会将文件内容作为字符串提供)

要从
字节[]
获取
字符串
,请使用构造函数:

new String(b)
但您可能需要指定特定的字符集,例如:

new String(b, StandardCharsets.ISO_8859_1)

否则,根据JVM的配置,您可能会得到不同的结果。

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

请注意,空格在当前是有效的,如中所述