我试图从服务器读取响应。我有两种方法。第一个没有阻止但第二个阻止。我不明白为什么不同......
方法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;
}
答案 0 :(得分:0)
第一种方法执行单次读取,无法检查流的结束,并返回读取为String的数据,或者在流结束时抛出ArrayIndexOutOfBoundsException
。
第二种方法读入循环直到流结束,然后将所有读取的数据作为单个字符串返回。
当对等方关闭连接时发生流结束。如果对等方没有关闭连接,则第二种方法将在读取方法中阻塞。