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(); } |
希望它有帮助。