FileInputStream在Android应用程序中的字节数组

我有一个使用Context.openFileInput()创build的FileInputStream。 我现在想把文件转换成一个字节数组。

不幸的是,我无法确定FileInputStream.read(byte[])所需的字节数组的大小。 available()方法不起作用,我不能创build一个文件来使用特定的path名​​来检查它的长度,可能是因为非root用户无法访问该path。

我读了关于ByteArrayOutputStream ,它似乎dynamic调整字节数组大小适合,但我不能得到如何从FileInputStream读取写入到ByteArrayOutputStream

Solutions Collecting From Web of "FileInputStream在Android应用程序中的字节数组"

这应该工作。

 InputStream is = Context.openFileInput(someFileName); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] b = new byte[1024]; while ((int bytesRead = is.read(b)) != -1) { bos.write(b, 0, bytesRead); } byte[] bytes = bos.toByteArray(); 

这是最简单的方法

 FileInputStream fis = openFileInput(fileName); byte[] buffer = new byte[(int) fis.getChannel().size()]; fis.read(buffer); 

您可以使用预分配字节数组

 int size = context.getFileStreamPath(filename).length(); 

这样,您将避免每次ByteArrayOutputStream填充时分配内存块。

对于任何设备和应用程序的工作方法,你只需要更换:

 InputStream is = Context.getContentResolver().openInputStream(yourFileURi); 

这样你也可以编码外部文件。