图像 Uri 到字节数组

新手上路,请多包涵

我目前有两项活动。一个用于从 SD 卡中提取图像,一个用于蓝牙连接。

我使用 Bundle 从活动 1 传输图像的 Uri。

现在我想做的是将蓝牙活动中的 Uri 获取并通过字节数组将其转换为可传输状态我已经看到了一些示例,但我似乎无法让它们为我的代码工作!

 Bundle goTobluetooth = getIntent().getExtras();
    test = goTobluetooth.getString("ImageUri");

是我必须克服的。下一步是什么?

原文由 user1314243 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 754
2 个回答

Uri 得到 byte[] 我做了以下事情,

 InputStream iStream =   getContentResolver().openInputStream(uri);
byte[] inputData = getBytes(iStream);

getBytes(InputStream) 方法是:

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

原文由 user370305 发布,翻译遵循 CC BY-SA 3.0 许可协议

Kotlin 在这里非常简洁:

 @Throws(IOException::class)
private fun readBytes(context: Context, uri: Uri): ByteArray? =
    context.contentResolver.openInputStream(uri)?.buffered()?.use { it.readBytes() }

Kotlin has convenient extension functions for InputStream like buffered , use , and readBytes .

  • buffered 将输入流装饰为 BufferedInputStream
  • use 处理关闭流
  • readBytes 完成读取流和写入字节数组的主要工作

错误案例:

  • IOException 可以在过程中发生(就像在 Java 中一样)
  • openInputStream 可以返回 null 。如果您在 Java 中调用该方法,您可以轻松地对其进行监督。想想你想如何处理这个案子。

原文由 Peter F 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题