Ответ 1
Из Java 8:
rd.lines().collect(Collectors.joining());
@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
в строку как можно меньше строк кода. Как это сделать?
Из Java 8:
rd.lines().collect(Collectors.joining());
Я предлагаю использовать библиотеку commons IO - тогда это простой 1 лайнер:
String message = org.apache.commons.io.IOUtils.toString(rd);
конечно, имейте в виду, что с помощью этого механизма можно было бы сделать атаку отказа в обслуживании, отправив бесконечный поток данных, который заполнит вашу память сервера.
Я нашел себе это сегодня. Не хотел вводить IOUtils, поэтому я пошел с этим:
String response = new String();
for (String line; (line = br.readLine()) != null; response += line);
Используйте переменную как String следующим образом:
BufferedReader rd = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
String line = "";
while((line = rd.readLine()) != null){
}
Практически так же, как и другие фрагменты на этой странице, но просто упорядочиваем все по функции, здесь мы идем...
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;
}