将文件读取到字节数组时的冗余字节
问题描述:
下面是一些读取文件的方法,用于在我的android应用程序中使用的字节数组。将文件读取到字节数组时的冗余字节
- M1:
private static byte[] readFileAsBytes(String filePath)
throws java.io.IOException{
FileInputStream fisTargetFile = new FileInputStream(new File(filePath));
String targetFileStr = IOUtils.toString(fisTargetFile, "UTF-8");
byte[] inputData = IOUtils.toByteArray(new StringReader(targetFileStr),"UTF-8");
return inputData;
}
- M2
private static byte[] readFileAsBytes(String filePath)
throws java.io.IOException{
File file = new File(filePath);
FileInputStream inputFile = new FileInputStream(file);
byte inputData[] = new byte[(int)file.length()];
inputFile.read(inputData);
inputFile.close();
return inputData;
}
我this 还使用方法......
但是,当我调试,我dectect一些多余字节,例如:
文件文本:ABCDEF
当调试:
- 在M1:inputData: {-17,-69,-65,65,66,67,68,69,70}
我知道A - > 65,B - > 66,...但是为什么出现{-17,-69,-65}
-In M2:出现比M1多的冗余。
我已经搜索,但没有发现相同的问题。
对我有任何建议。
谢谢!
答
String targetFileStr = IOUtils.toString(fisTargetFile, "UTF-8");
byte[] inputData = IOUtils.toByteArray(new StringReader(targetFileStr),"UTF-8");
不要使用中间字符串或StringReader将文件的字节放入字节数组中。
例如,你不能把一个jpg文件放在字符串中,因为它没有文本。
将字节直接放入字节数组中,就像在第二个readFileAsBytes()中一样。那个应该工作。但是你必须检查inputFile.read(inputData)的返回值;并最终形成一个循环。
三个前导字节是BOM。一个字节顺序标记。参见:https://en.wikipedia.org/wiki/Byte_order_mark
The UTF-8 representation of the BOM is the byte sequence 0xEF,0xBB,0xBF
+0
第二个不能保证工作(虽然它通常会),因为读取调用不需要读取完整阵列或完整文件。 – Henry
这两个片段都是错误的。 – Henry
请对字节值使用十六进制表示法。小数点是不可读的。 – greenapps
'文件文本:ABCDEF'。你有哪些程序/应用程序制作文件?文件的大小是多少? 6或9? 9我相信你有9个价值观。但是ABCDEF只有6个字符。最有可能的前三个值是BOM。一个字节顺序标记。 – greenapps