为什么使用commons.io.IOUtils
获得byte[]
时结果不一样?
toByteArray
方法参数是Inputstream
和Reader
。
String file = "c:/c.pdf";
try (InputStream is = new FileInputStream(file)) {
byte[] result = IOUtils.toByteArray(is);
System.err.println(Arrays.toString(result));
} catch (Exception e) {
e.printStackTrace();
}
try (Reader reader = new FileReader(file)) {
byte[] result = IOUtils.toByteArray(reader,"gbk");
System.err.println(Arrays.toString(result));
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:0)
简短的回答:这两个结果不同,因为第二种解决方案是错误的。永远不要使用<script>
$('body').on('click', '#btnCancel', function (e) {
alert();
$('#DivDatEntry').html("");
});
</script>
来读取二进制数据。
Reader
读取文件的字节时不尝试赋予它们任何含义;相反,InputStream
尝试使用特定的字符集将其转换为字符:您的第二个示例读取字节,将其转换为字符,然后Reader
方法将这些字符转换回字节,但此两倍转换不仅无效(显而易见),这是很错误的,因为第一次转换可能会失败:当Reader遇到一个字节(如果是GBK等多字节字符集,则为一组字节)时,没有相关的字符,它将返回一个问号字符,当您将这些问号转换回字节时,将得到与问号相对应的字节值,而不是未能通过转换的原始值。
因此问题不在toByteArray()
中,而是在您使用Reader读取PDF时出现的。