Wie konvertiert man einen BufferedReader einfach in einen String?

Lesezeit: 2 Minuten

Benutzer-Avatar
Jeungwoo Yoo

@POST
@Path("/getphotos")
@Produces(MediaType.TEXT_HTML)
public String getPhotos() throws IOException{
    // DataInputStream rd = new DataInputStream(request.getInputStream());
    BufferedReader rd = new BufferedReader(
        new InputStreamReader(request.getInputStream(), "UTF-8")
    );
    String line = null;
    String message = new String();
    final StringBuffer buffer = new StringBuffer(2048);
    while ((line = rd.readLine()) != null) {
        // buffer.append(line);
        message += line;
    }
    System.out.println(message);
    JsonObject json = new JsonObject(message);
    return message;
}

Der obige Code ist für mein Servlet. Sein Zweck besteht darin, einen Stream abzurufen, daraus eine JSON-Datei zu erstellen und die JSON dann an den Client zurückzusenden. Aber um Json zu machen, muss ich lesen BufferedReader Objekt rd mit einer “while”-Schleife. Allerdings würde ich gerne umbauen rd um so wenig Codezeilen wie möglich einzufügen. Wie mache ich das?

  • Schwer zu erkennen, was Ihr Einwand gegen drei zusätzliche Codezeilen sein könnte.

    – Benutzer207421

    11. September 2016 um 5:50 Uhr

Benutzer-Avatar
Gogol

Ab Java8:

rd.lines().collect(Collectors.joining());

  • Exzellent! Die Leute sollten mehr Wert auf Lösungen legen, die keine großen, fetten Bibliotheken zu ihren Projekten hinzufügen müssen.

    – Lucio Paiva

    6. Oktober 2017 um 21:14 Uhr

  • Übrigens musste ich tun Collectors.joining("\n") um jeder Zeile ein abschließendes Zeilenumbruchzeichen hinzuzufügen.

    – Lucio Paiva

    6. Oktober 2017 um 21:15 Uhr


  • Call requires API level 24 (current min is xx): java.io.BufferedReader#lines

    – Vlad

    23. Januar 2018 um 12:20 Uhr

  • SEHR WICHTIG, um die Collectors.joining(“\n”) durchzuführen. Diese Antwort ist so falsch! Ich hoffe, andere vermissen es nicht so wie ich. auch sehr wichtig, was ist, wenn der Anforderungstext andere Escape-Zeichen verwendet, wie z \r? nicht sicher. Daher würde ich stattdessen die IOUtils-Bibliothek bevorzugen

    – stelios.anastasakis

    4. Januar um 17:03 Uhr

  • \r tatsächlich konvertiert wird \n und dies könnte in einigen Fällen zu Fehlern führen (in meinem Fall, weil das Ergebnis in hmac verwendet wird und der Hash, den ich erstelle, nicht mit dem übereinstimmt, den ich erhalten habe).

    – stelios.anastasakis

    4. Januar um 17:21 Uhr


Ich schlage vor, die Commons IO-Bibliothek zu verwenden – dann ist es ein einfacher 1-Liner:

String message = org.apache.commons.io.IOUtils.toString(rd);

Beachten Sie natürlich, dass mit diesem Mechanismus ein Denial-of-Service-Angriff durchgeführt werden könnte, indem ein endloser Datenstrom gesendet wird, der Ihren Serverspeicher füllt.

  • genau das, was ich brauchte!

    – Jan Schäfer

    30. September 2014 um 13:26 Uhr

  • Java braucht unbedingt mehr Einzeiler

    – Johannes P

    27. Oktober 2015 um 9:54 Uhr

  • Ich würde dies verwenden, wenn commons-io in den letzten 3 Jahren aktualisiert worden wäre 🙁

    – Navin

    20. Dezember 2015 um 3:27 Uhr


Ich fand mich heute dabei. Ich wollte IOUtils nicht einbringen, also ging ich mit diesem:

String response = new String();
for (String line; (line = br.readLine()) != null; response += line);

  • Kurz und bündig.

    – Hank Lenzi

    24. Januar um 13:57 Uhr

Verwenden Sie eine Variable als String wie folgt:

BufferedReader rd = new BufferedReader(
                new InputStreamReader(response.getEntity().getContent()));
String line = "";
while((line = rd.readLine()) != null){

} 

1131260cookie-checkWie konvertiert man einen BufferedReader einfach in einen String?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy