Подтвердить что ты не робот

Как легко преобразовать BufferedReader в 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;
}

Код выше для моего сервлета. Его цель - получить поток, сделать из него Json файл, а затем отправить Json на клиент обратно. Но для того, чтобы сделать Json, я должен прочитать BufferedReader object rd, используя цикл while. Однако я хотел бы преобразовать rd в строку как можно меньше строк кода. Как это сделать?

4b9b3361

Ответ 1

Из Java 8:

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

Ответ 2

Я предлагаю использовать библиотеку commons IO - тогда это простой 1 лайнер:

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

конечно, имейте в виду, что с помощью этого механизма можно было бы сделать атаку отказа в обслуживании, отправив бесконечный поток данных, который заполнит вашу память сервера.

Ответ 3

Я нашел себе это сегодня. Не хотел вводить IOUtils, поэтому я пошел с этим:

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

Ответ 4

Используйте переменную как String следующим образом:

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

} 

Ответ 5

Практически так же, как и другие фрагменты на этой странице, но просто упорядочиваем все по функции, здесь мы идем...

String str=shell_exec("ls -l");

Функция класса:

public String shell_exec(String cmd)
       {
       String o=null;
       try
         {
         Process p=Runtime.getRuntime().exec(cmd);
         BufferedReader b=new BufferedReader(new InputStreamReader(p.getInputStream()));
         String line;
         while((line=b.readLine())!=null)o+=line;
         }catch(Exception e){}
       return o;
       }