Tags: Java

Java: Jak odczytać / przekonwertować InputStream na String?

Odczytanie lub konwersja `InputStream` na `String` w Javie jest często potrzebna podczas pracy z operacjami wejścia-wyjścia. Możesz to zrobić na kilka sposobów, w zależności od używanej wersji Javy i dostępnych bibliotek. Oto kilka popularnych metod:

Java 8 i nowsze: Użycie `java.util.Scanner`


import java.io.InputStream;
import java.util.Scanner;</p&gp;
<p&gp;public class InputStreamToString {
    public static String convertUsingScanner(InputStream inputStream) {
        Scanner scanner = new Scanner(inputStream).useDelimiter("\A");
        return scanner.hasNext() ? scanner.next() : "";
    }
}

Java 8 i nowsze: Użycie `java.nio.charset.StandardCharsets`


import java.io.InputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;</p&gp;
<p&gp;public class InputStreamToString {
    public static String convertUsingJava8(InputStream inputStream) throws IOException {
        byte[] bytes = inputStream.readAllBytes();
        return new String(bytes, StandardCharsets.UTF_8);
    }
}

Java 8: Użycie `java.io.BufferedReader`


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;</p&gp;
<p&gp;public class InputStreamToString {
    public static String convertUsingBufferedReader(InputStream inputStream) throws IOException {
        StringBuilder sb = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
        String line;
        while ((line = br.readLine()) != null) {
            sb.append(line).append("n");
        }
        br.close();
        return sb.toString();
    }
}

Apache Commons IO

Jeśli masz do dyspozycji bibliotekę Apache Commons IO, możesz użyć klasy `IOUtils` do skrócenia procesu.

Dodaj zależność do Mavena:


<dependency&gp;
    <groupId&gp;commons-io</groupId&gp;
    <artifactId&gp;commons-io</artifactId&gp;
    <version&gp;2.6</version&gp;
</dependency&gp;

Przykład konwersji:


import java.io.InputStream;
import java.io.IOException;
import org.apache.commons.io.IOUtils;</p&gp;
<p&gp;public class InputStreamToString {
    public static String convertUsingApacheCommonsIO(InputStream inputStream) throws IOException {
        return IOUtils.toString(inputStream, "UTF-8");
    }
}

Metoda, którą wybierzesz, zależy od Twoich potrzeb i wersji Javy. `java.util.Scanner` jest prostym rozwiązaniem, ale nie zawsze jest najlepsze dla bardzo dużych strumieni danych. Użycie `java.nio` (dostępne od Javy 8) jest bardziej efektywne dla dużych danych. `BufferedReader` jest dobrym rozwiązaniem dla starszych wersji Javy. Apache Commons IO oferuje wygodne i krótkie rozwiązanie, ale wymaga dodatkowej zależności.