Преобразование 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() читает (и «забирает») один байт
из потока.