ti-enxame.com

Como converter facilmente um BufferedReader para uma String?

@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;
}

O código acima é para o meu servlet. Seu objetivo é obter um fluxo, criar um arquivo Json a partir dele e enviar o Json para o cliente de volta. Mas para criar o Json, eu tenho que ler BufferedReader object rd usando um loop "while". No entanto, eu gostaria de converter rd em string no menor número possível de linhas de código. Como faço isso?

38
Jeungwoo Yoo

Eu sugiro usar a biblioteca IO commons - então é um liner 1 simples:

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

é claro, esteja ciente de que, usando esse mecanismo, um ataque de negação de serviço pode ser feito, enviando um fluxo interminável de dados que preencherá a memória do servidor.

53
Richard

De Java 8:

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

Eu me vi fazendo isso hoje. Não quis trazer IOUtils, então fui com isso:

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

Use uma variável como String assim:

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

} 
3
Armando Esparza García