이것은 특정 컴퓨터에있을 때만 발생하는 약간의 모호한 문제입니다. 오늘 학교의 XP 컴퓨터에서이 문제가 발생했으며 가정용 컴퓨터 (W7)에서이를 복제 할 수 없습니다. (: int avail, InputStream socket, byte[] buffer, String output
) :InputStream의 사용 가능()이 멈추는 경향이 있습니다
while((avail = input.available()) > 0)
{
read = input.read(buffer);
output += new String(buffer, 0, read);
}
데이터를 사용할 수 없을 때까지 감 (모든 데이터를 읽을 수 있도록 보인다 어쨌든
는 읽기/자바 소켓에 쓰기는이 코드를 사용할 때마다 문제가 될 경향이있다 임시 버퍼로, 문자열로) 그러나 학교 컴퓨터 (IE7을 사용하여 테스트)에서 모든 것이 어떻게 든 일시 중지됩니다. 나는 스레드가 단지 끝점에 도달하지 않고 계속 실행되기 때문에 input.available()이 어떻게 든 블록을 일으키는 것으로 생각하고 있습니다 ... 효과적으로 어딘가에 일시 중지합니다.오하이오, 내가 언급 한 것을 잊어 버렸습니다 : 언제든지 이것을 디버그 모드로 실행하고 각 라인을 단계별로 수행 할 때마다 완벽하게 작동해야합니다 ... 더 혼란 스럽습니다.
이 문제를 재현하기 위해 집에 왔을 때 Firefox와 IE8만으로도 제대로 작동합니다. 나는 이것에 대한 더 나은 대안이 무엇인지 모릅니다.
PS : 버퍼가 충분히 크고 난 그냥 사용 경우
이 read = input.read(buffer);
output += new String(buffer, 0, read);
그냥 잘 작동하지만 전송 된 데이터가 버퍼 크기를 초과 할 걱정은 항상있다.
입력의 끝이 감지되거나 일부 데이터를 사용할 수있을 때까지 '읽기'가 차단됩니다. 실제로'available()> 0'은 어떤 데이터가 블로킹없이 사용 가능하다는 것을 나타 내기 때문에'available()'는 단지 _estimate_라는 것을 기억하는 것이 중요합니다. –