Как вернуть 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"));

Другие вопросы по тегам