从android中的inputstream获取bytes []会给出null值

Getting bytes[] from inputstream in android gives null value

本问题已经有最佳答案,请猛点这里访问。

尝试从inputstream获取字节数据,如下面的代码所示。但是,bytes变量为空。原因可能是什么?仅供参考-图像在给定的URI中可用,因为我可以在ImageView1中看到图像。(棒棒糖测试)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
final InputStream imageStream = getContentResolver().openInputStream(imageUri);
var_Bitmap = BitmapFactory.decodeStream(imageStream);
ImageView imageView1 = (ImageView) findViewById(R.id.ui_imageView_browse);
imageView1.setImageBitmap(var_Bitmap);
byte[] bytes = IOUtils.toByteArray(imageStream);
OutputStream out;
String root = Environment.getExternalStorageDirectory().getAbsolutePath()+"/";
File createDir = new File(root+"master"+File.separator);
createDir.mkdir();


File file = new File(root +"master" + File.separator +"master.jpg");
path=root+"master"+File.separator+"master.jpg";
file.createNewFile();
out = new FileOutputStream(file);
out.write(bytes);
out.close();


正如pskink在评论中建议的那样,问题是输入流已经被decodestream读取到了eof,所以没有什么可以读取的了。

为了解决这个问题,我为inputstream创建了一个临时变量。


试试这个:

1
2
3
4
5
6
7
8
9
10
11
 public byte[] getBytes(InputStream inputStream) throws IOException {
        ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
        int bufferSize = 1024;
        byte[] buffer = new byte[bufferSize];

        int len = 0;
        while ((len = inputStream.read(buffer)) != -1) {
            byteBuffer.write(buffer, 0, len);
        }
        return byteBuffer.toByteArray();
    }

希望它有帮助。