读取文件到字节数组时的冗余字节数

时间:2017-03-16 10:51:54

标签: java android readfile

以下是我在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中的方法 ...

但是,当我调试时,我会检测一些冗余字节,例如:

档案文字:ABCDEF

调试时:
- 在M1:inputData: {-17,-69,-65,65,66,67,68,69,70}

我知道A - > 65,B - > 66,......但为什么会出现{-17,-69,-65}

-In M2:出现比M1更多的冗余。

我搜索过,但没有发现同样的问题。

对我有任何建议。

谢谢!

1 个答案:

答案 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