使用字节数组读取文件,然后在ImageView(Android)上显示

使用字节数组读取文件,然后在ImageView(Android)上显示,android,bytearray,Android,Bytearray,我试图用ImageView显示一个图片文件, 虽然我知道我可以直接把文件解码成位图, 但是我必须对它做一些其他的事情,所以我只能选择byte[] 代码如下所示: File file = new File(getRealPathFromURI(Uri.parse(ImgUri))); byte[] beforeData = new byte[(int) file.length()]; try { FileInputStream fis = new FileInputStream(file)

我试图用ImageView显示一个图片文件, 虽然我知道我可以直接把文件解码成位图, 但是我必须对它做一些其他的事情,所以我只能选择byte[]

代码如下所示:

File file = new File(getRealPathFromURI(Uri.parse(ImgUri)));
byte[] beforeData = new byte[(int) file.length()];
try {
    FileInputStream fis = new FileInputStream(file);
    int detectEnd = 0;
    while (detectEnd != -1){detectEnd = fis.read(beforeData, 0, 1024);}
    Bitmap b_t = BitmapFactory.decodeByteArray(beforeData, 0, beforeData.length);
    editImgView.setImageBitmap(b_t);
} catch (FileNotFoundException e) {e.printStackTrace();}
    catch (IOException e) {e.printStackTrace();}
我试着测试我是否正确阅读了图片, 所以我解码成位图,然后试着显示它, 但它根本不显示任何图片

我对FileInputStream有什么误解吗? 另外,我使用log.I检查发现beforeData的长度正常, 但里面的数据只能得到: [B@40c4b110 , 这与图片的数据不同

提前感谢,, 德索夫

哦,谢谢你,硅凝胶, 我忘了考虑那部分……(一开始我就这么做了) 然而,似乎这不是主要问题所在。。。 现在循环看起来像:

    while (pos < beforeData.length){
            read = fis.read(beforeData, pos, 1);
            pos += read;
        }
while(pos
我知道这很愚蠢很愚蠢, 但是这个块中的代码应该可以正常工作,对吗? 但是,我仍然无法在ImageView中看到任何图片

另请注意: 文件路径为/mnt/sdcard/DCIM/Camera/1310368442822.jpg, 大小为1485847字节,
大小是否会导致任何问题?

每个循环只将数据读取到数组的前1024个字节中

fis.read(beforeData, 0, 1024);
您必须维护一个位置计数器(int pos)并使用另一个变量(int read)来检测-1

int read=0;
int pos=0;
while (read!=-1) {
    read= fis.read(beforeData, pos, 1024);
    pos+=read;
}
请确保同时关闭文件(fis.close())

最好的办法是:

File tmpImgFile = new File("/path");
BitmapFactory.decodeFile(tmpImgFile.getAbsolutePath());

每个循环只将数据读入数组的前1024个字节

fis.read(beforeData, 0, 1024);
您必须维护一个位置计数器(int pos)并使用另一个变量(int read)来检测-1

int read=0;
int pos=0;
while (read!=-1) {
    read= fis.read(beforeData, pos, 1024);
    pos+=read;
}
请确保同时关闭文件(fis.close())

最好的办法是:

File tmpImgFile = new File("/path");
BitmapFactory.decodeFile(tmpImgFile.getAbsolutePath());

谢谢,但还是有问题。谢谢,但还是有问题。