누군가가 내게 설명해 줄 수있는 이유는 in.available()> 0이 제대로 작동하는 이유입니다.하지만 주석을 달았습니다. 더 구체적으로BufferedInputStream은 사용할 수는 없지만 어쨌든 작동합니다.
mySocket = new Socket("blahblah", 12345);
BufferedInputStream in = new BufferedInputStream(mySocket.getInputStream());
....
char result[] = new char[length];
for (int i = 0; i < length && !mySocket.isClosed() /*&& in.available()>0*/; i++){
result[i] = (char)in.read();
}
: 나는 사용자가 용어를 검색 할 수있는 안드로이드 응용 프로그램을 만들고있어, 해당 검색이 공간의 일부 꼬추로 전송됩니다, 나는 XML 형태로 결과를 다시 얻을, 그들과 함께 물건을 할. 반환되는 XML이 충분히 작을 때 (위의 코드에서 길이 참조), 코드는 in.available()> 0을 그대로 유지하면서 정상적으로 작동하지만 길이가 클 경우 in.available()은 0을 반환합니다. 그러나 주석을 달아 모든 것이 원활하게 진행됩니다.
왜 그럴까요? 그리고 내가 걱정하고 고칠 필요가있는 것이 있습니까?
isClosed() 테스트도 제거해야합니다. 그것은 당신이 생각하는 것을하지 않습니다 : 당신이 소켓을 직접 닫았는지 여부 만 알려줍니다. EOS 테스트가 아닙니다. -1을 반환하는 read()는이를 알려줍니다. 소켓을 직접 닫은 경우 처음부터이 코드 근처에 있으면 안됩니다. – EJP