Android - получение от Uri до InputStream к массиву байтов?

Я пытаюсь добраться от Uri Android до массива байтов.

У меня есть следующий код, но это продолжает говорить мне, что массив байтов 61 байт длиной, даже при том, что файл является довольно большим - таким образом, я думаю, что это может превращать строку Uri в массив байтов, а не файл :(

  Log.d(LOG_TAG, "fileUriString = " + fileUriString);
  Uri tempuri = Uri.parse(fileUriString);
  InputStream is = cR.openInputStream(tempuri);
  String str=is.toString();
  byte[] b3=str.getBytes();
  Log.d(LOG_TAG, "len of data is " + imageByteArray.length
     + " bytes");

Кто-то может помочь мне разработать, что сделать?

Вывод "fileUriString = content://media/external/video/media/53", и "len данных 61 байт".

Спасибо!

32
задан AP257 12 March 2010 в 22:46
поделиться

1 ответ

is.toString () предоставит вам строковое представление экземпляра InputStream, а не его содержимое.

Вам нужно прочитать () байты из InputStream в ваш массив. Для этого есть два метода чтения: read () , который читает по одному байту за раз, и read (byte [] bytes) , который считывает байты из InputStream в массив байтов. переходите к нему.


Обновление: чтобы прочитать байты, учитывая, что InputStream не имеет длины как таковой, вам нужно читать байты, пока ничего не останется. Я предлагаю создать для себя метод, подобный этому, - хорошая простая отправная точка (по крайней мере, так я бы сделал это на Java).

public byte[] readBytes(InputStream inputStream) throws IOException {
  // this dynamically extends to take the bytes you read
  ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();

  // this is storage overwritten on each iteration with bytes
  int bufferSize = 1024;
  byte[] buffer = new byte[bufferSize];

  // we need to know how may bytes were read to write them to the byteBuffer
  int len = 0;
  while ((len = inputStream.read(buffer)) != -1) {
    byteBuffer.write(buffer, 0, len);
  }

  // and then we can return your byte array.
  return byteBuffer.toByteArray();
}
68
ответ дан 27 November 2019 в 20:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: