2011-02-11 3 views
3

나는 소켓을 통해 ObjectOutputStream에 연결된 을 가지고 있으며, ObjectInputStream.readObject()을 100ms 동안 차단하도록 Socket.setSoTimeout()을 사용 해왔다. 내가 이것을 시작한 이래로 readObject()을 호출하는 동안 StreamCorruptedError을 많이 보았습니다. 타임 아웃이 원인이 될 수 있습니까?ObjectInputStream.readObject()에 대한 시간 초과 설정이 안전합니까?

+0

예 ------------ –

+0

이것은 정말 나쁜 생각처럼 들립니다. 무엇을 성취하려고합니까? 나는 거기에 해결책이있을 것이라고 확신하지만'Socket.setSoTimeout()'이 아니다. – biziclop

+0

이 함수를 통해 끊임없이 새 데이터를 얻는 스레드가 있지만 부울을 false로 설정하여 스레드를 중지 할 수 있기를 원합니다. 쓰레드는 계속 부울을 폴링해야하고'readObject() '에 의해 차단 된 경우에는 처리 할 수 ​​없습니다. –

답변

5

이 함수를 통해 끊임없이 새로운 데이터를 얻는 스레드가 있지만 부울을 false로 설정하여 중지 할 수 있기를 원합니다. 스레드는

당신은 그것이 InterruptedException를 던져, 또는이 경우 InterruptedIOException에 있도록 Thread.interrupt()를 사용하여 폴링에게 부울을 유지해야하고 그것은 readObject에 의해 차단 된 것 수없는 경우. 예외를 삼가 지 않도록하십시오!

+0

감사합니다. - InterruptedIOException에 대해 몰랐습니다. 이제 잘 작동합니다! –

3

타임 아웃을 스트림 읽기에서 발생할 수있는 일반적인 지연보다 짧게 설정하면 스트림이 여전히 적절하게 활성화되어있을 때 타임 아웃이 유효하다고 생각할 수 있습니다.

100ms는 오랜 시간이 걸릴 것으로 보이지만 디스크 또는 네트워크 트래픽이 관련된 경우에는 그렇지 않습니다. 어리석은 일에 시간 초과를 시도하십시오.