有时候我们拿到一个视频文件或者一张图片文件,经过处理之后想把文件转成字符串String返回给前端,当然这里我们不会直接把String返回给前端,我们会经过处理,比如做Base64处理返回。这里我们先讨论一下如何把文件转成String的问题,请看代码:
public static void testFileByteCode(){
try {
// 输出默认的字符集
System.out.println(Charset.defaultCharset());
File file = new File("/Users/mac/Desktop/B612/a.jpg");
// File file = new File("/Users/mac/Desktop/B612/ms/mp4/c.mp4");
byte[] bytes = FileUtils.readFileToByteArray(file);
String s1 = new String(bytes);
// 直接输出byte数组的长度
System.out.println(bytes.length);
// new String(),系统默认字符集,我是mac,默认是UTF-8
System.out.println(s1.length());
System.out.println(s1.getBytes().length);
String s2 = new String(bytes,Charsets.ISO_8859_1);
// new String(),用ISO_8859_1字符集编码
System.out.println(s2.length());
System.out.println(s2.getBytes(Charsets.ISO_8859_1).length);
}catch (Exception e){
e.printStackTrace();
}
}
a.jpg这张图片输出的结果为:
9516
9013
16983
9516
9516
c.mp4这个视频文件输出的结果为:
7990662
7566344
14478208
7990662
7990662
通过以上结果我们发现,new String()只有在使用ISO_8859_1字符集的时候,最终生成的字符串的长度或者字节数组的长度才和我们的文件的原始字节数组的长度一样。
所以我们得出的结论就是在对图片或者视频等这类文件进行字节数组转String的时候要使用ISO_8859_1字符集。