Преобразование String в InputStream на Java — ByteArrayInputStream

Иногда нам нужно превратить обычную строку (String) в поток байтов (InputStream). Это бывает полезно, когда какой-то метод ожидает на вход именно поток, а у нас есть только текстовая строка (например, при отправке данных в HTTP-запрос или при тестировании кода, который читает из файла).

Чтобы понять этот пример, желательно знать:

  • Строки в Java (String)

  • Класс InputStream

  • Класс ByteArrayInputStream

Пример: программа на Java для преобразования String в InputStream

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

public class Main {

  public static void main(String args[]) {

    // Creates a string
    String name = "Programiz";
    System.out.println("String is: " + name);

    try {

      InputStream stream = new ByteArrayInputStream(name.getBytes(StandardCharsets.UTF_8));
      System.out.println("InputStream: " + stream);

      // Returns the available number of bytes
      System.out.println("Available bytes at the beginning: " + stream.available());

      // Reads 3 bytes from the stream stream
      stream.read();
      stream.read();
      stream.read();

      // After reading 3 bytes
      // Returns the available number of bytes
      System.out.println("Available bytes at the end: " + stream.available());

      stream.close();
    }

    catch (Exception e) {
      e.getStackTrace();
    }
  }
}

Вывод:

String is: Programiz
InputStream: java.io.ByteArrayInputStream@5479e3f
Available bytes at the beginning: 9
Available bytes at the end: 6

В этом примере мы создали строку с именем name. Затем мы преобразуем эту строку в поток ввода с именем stream.

Примечание

Метод getBytes() преобразует строку в массив байтов. Подробнее о нём — в справочнике по методу String.getBytes().

Совет

В начале в потоке доступно 9 байт (длина слова «Programiz»). После трёх вызовов stream.read() остаётся 6 байт — каждый read() читает (и «забирает») один байт из потока.