2013-02-23 58 views
20
@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; 
} 

上面的代码用于我的servlet。它的目的是获取一个流,从中创建一个Json文件,然后将Json发送回客户端。 但为了使Json,我必须阅读BufferedReader对象rd使用“while”循环。不过,我想将rd转换为尽可能少的代码行。我怎么做?如何轻松将BufferedReader转换为字符串?

+0

很难看到你反对的代码三个额外的线路可能是什么。 – EJP 2016-09-11 05:50:08

回答

43

我建议使用公共IO库 - 那么它是一个简单的1个班轮:

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

,要知道,使用这种机制,服务拒绝攻击会进行,通过发送一个永无止境数据流将填满您的服务器内存。

+0

哇,我可以做到,谢谢你的帮助。 – 2013-02-23 13:44:06

+0

正是我所需要的! – 2014-09-30 13:26:36

+11

Java完全需要更多的单行程程序 – 2015-10-27 09:54:40

3

使用一个变量作为字符串是这样的:

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

} 
+0

)如果缓冲区不以''结尾,那么缓冲区的最后一行不会添加到字符串中\ n” – 2016-05-21 23:00:39

+0

@AmineZaine这是不正确的。试试吧。 – EJP 2016-09-11 05:50:27

+1

然而,这是完全一样被张贴,只有更糟。 – EJP 2016-09-11 05:50:55

6

我发现自己今天这个做。本来不想在IOUtils带来,让我去这个:

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

从Java 8:

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

好极了!人们应该以不要求增加大,脂肪库解决方案提供更多价值的代码 – 2017-10-06 21:14:15

+1

顺便说一句,我必须做'Collectors.joining(“\ n”)'为每行添加一个尾随的换行符 – 2017-10-06 21:15:18

+0

'调用需要API级别24(当前最小值是xx):java。 io.BufferedReader#lines' – 2018-01-23 12:20:48

相关问题