这里我有一个代码接受字节数组中的文件内容,我想检查它是否是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);
}
}
答案 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中所述的空格当前有效。