Как вернуть InputStream из String
Есть сценарий, в котором httpentity содержит двоичные данные изображения в InputStream, для дальнейшей обработки его преобразуют в файл String в библиотечный файл [String str = EntityUtils.toString(httpResponse.getEntity())
], теперь я пытаюсь получить поток ввода обратно из этой строки.
Для понимания проблемы воспользуйтесь приведенным ниже сценарием:
Рабочая - ImageView отображается с контентом
InputStream inStream = getContentResolver().openInputStream(thisPhotoUri);
Bitmap bm = BitmapFactory.decodeStream(inStream);
ImageView view = (ImageView)findViewById(R.id.picture_frame);
view.setImageBitmap(bm);
Проблема - ImageView не отображается с изображением
InputStream inStream = getContentResolver().openInputStream(thisPhotoUri);
String str = inStream.toString();
InputStream is = new ByteArrayInputStream(str.getBytes());
Bitmap bm = BitmapFactory.decodeStream(is);
ImageView view = (ImageView)findViewById(R.id.picture_frame);
view.setImageBitmap(bm);
3 ответа
Вы не можете напрямую преобразовать InputStream в String. Это может быть проблемой.
String str = inStream.toString();
Посмотрите на это, чтобы определить способ преобразования InputStream в String.
InputStream.toString()
не делает то, что вы ожидаете. Это назовет Object.toString()
метод, и вы получите что-то вроде java.io.InputStream@604c9c17
, а не реальное содержание потока!
Попробуйте System.out.println(str);
чтобы увидеть, что это такое.
Вот почему вы не можете восстановить оригинал InputStream
из этого контента, потому что это не содержание InputStream
!
Вы должны прочитать поток другим способом, чтобы получить содержимое к String
! Смотрите: чтение / преобразование InputStream в строку
Это должно быть то, что вы ищете:
InputStream stream = new ByteArrayInputStream(yourString.getBytes("UTF-8"));