开发者

FileInputStream to byte array in Android application

开发者 https://www.devze.com 2023-02-17 03:13 出处:网络
I have a FileInputStream created using Context.openFileInput(). I now want to convert the file into a byte array.

I have a FileInputStream created using Context.openFileInput(). I now want to convert the file into a byte array.

Unfortunately, I can't determine the size of the byte array required for FileInputStream.read(byte[]). The available() method doesn't work, and I can't create a File to check it's length using the specific pathname, probably because the path is inaccessible to non-root users.

I read about ByteArrayOutputStream, and it seems to dynamically adjust the byte array size to fit, but I can't get how t开发者_JAVA百科o read from the FileInputStream to write to the ByteArrayOutputStream.


This should work.

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();


This is the easiest way

FileInputStream fis =  openFileInput(fileName);

byte[] buffer =   new byte[(int) fis.getChannel().size()];

fis.read(buffer);


You can pre-allocate the byte array using

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

This way, you will avoid allocating memory chunks every time your ByteArrayOutputStream fills up.


For the method to work on any device and aplication you just need to replace:

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

This way you can encode external files as well.

0

精彩评论

暂无评论...
验证码 换一张
取 消