以下是我在Android应用程序中使用的一些读取文件到字节数组的方法。
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;
}
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中的方法 ...
但是,当我调试时,我会检测一些冗余字节,例如:
档案文字:ABCDEF
调试时:
- 在M1:inputData: {-17,-69,-65,65,66,67,68,69,70}
我知道A - > 65,B - > 66,......但为什么会出现{-17,-69,-65}
-In M2:出现比M1更多的冗余。
我搜索过,但没有发现同样的问题。
对我有任何建议。
谢谢!
答案 0 :(得分:0)
String targetFileStr = IOUtils.toString(fisTargetFile, "UTF-8");
byte[] inputData = IOUtils.toByteArray(new StringReader(targetFileStr),"UTF-8");
不要使用中间String或StringReader将文件的字节放在字节数组中。
例如,您不能将jpg文件放在String中,因为它没有文本。
将字节直接放在字节数组中,就像在第二个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