Я пытаюсь добраться от 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 байт".
Спасибо!
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();
}