从套接字块读取

时间:2016-06-26 15:48:17

标签: java sockets

我试图从服务器读取响应。我有两种方法。第一个没有阻止但第二个阻止。我不明白为什么不同......

方法1:

public static String lireReponse() throws IOException, NullPointerException {
    // recepteurReponses is a BufferedInputStream
    String reponse = "";
    byte[] flux = new byte[1024];
    int i = recepteurReponses.read(flux);
    reponse += new String(flux, 0, i);
    return reponse;
}

方法2:

public static String lireDonnees() throws IOException, NullPointerException {
    String reponse = "";
    byte[] flux = new byte[1024];
    int i = -1;
    while ((i = recepteurReponses.read(flux)) != -1)
        reponse += new String(flux, 0, i);
    return reponse;
}

1 个答案:

答案 0 :(得分:0)

第一种方法执行单次读取,无法检查流的结束,并返回读取为String的数据,或者在流结束时抛出ArrayIndexOutOfBoundsException

第二种方法读入循环直到流结束,然后将所有读取的数据作为单个字符串返回。

当对等方关闭连接时发生流结束。如果对等方没有关闭连接,则第二种方法将在读取方法中阻塞。