65
@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を作成するには、「while」ループを使用してBufferedReaderオブジェクトを読み取る必要があります。ただし、できるだけ少ないコード行で文字列にrd変換したいと思います。rdそれ、どうやったら出来るの?

4

4 に答える 4

58

commons IO ライブラリを使用することをお勧めします - それは単純な 1 ライナーです:

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

もちろん、このメカニズムを使用すると、サーバーのメモリをいっぱいにする終わりのないデータ ストリームを送信することにより、サービス拒否攻撃が行われる可能性があることに注意してください。

于 2013-02-23T12:30:55.717 に答える
25

私は今日これをやっていることに気づきました。IOUtils を導入したくなかったので、次のようにしました。

String response = new String();
for (String line; (line = br.readLine()) != null; response += line);
于 2016-12-23T18:02:32.487 に答える
3

次のように変数を文字列として使用します。

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

} 
于 2015-11-09T19:19:10.560 に答える