2011-08-25 29 views
5

Bir soketten okumak için BufferedInputStream kullanıyorum.BufferedInputStream ve Engelleme

socketInput.read(replyBuffer, 0, 7); 

Ben mySocket bağlı olduğunu doğruladıktan mySocket = new Socket(ipAddress, port);

tarafından örneği private Socket mySocket;

mySocket olarak tanımlanır

socketInput = new BufferedInputStream(mySocket.getInputStream()); 

mySocket tarafından örneği şu şekildedir: BufferedInputStream okur cihazım. Cihazıma veri gönderebilirim; Ancak, cihazımdan bilinmeyen nedenlerle almıyorum ama sorun değil.

BufferedInputStream numaramın herhangi bir veri okumadığı takdirde 100 ms sonra döndüğünü istiyorum. Bunu yapmak için BufferedInputStream kurulabilir mi? Şu anda süresiz olarak engelliyor.

+1

Herhangi bir tıkanıklık veya zaman aşımı G/Ç işlemi yapmak isterseniz, java.io'da olmayan NIO ('java.nio') sınıflarını kullanmalısınız. –

cevap

3

Tam olarak bu nedenle bir soketten okuma için bir arabellek akışı kullanmak kötü bir fikirdir: dahili arabelleğini doldurmak için yeterli veri görmüyorsa sonsuza kadar bekleyecektir (hangisi daha büyük olacak) 7 karakter!) Zaman aşımı yapmanın bir yolu yok. Doğrudan SocketInputStream kullanın ve sorun gider.

+0

, bunun yerine socket.getInputStream.read (..)? –

+3

Evet, işte bu kadar. Ardından, önerilen başka bir poster olarak setSoTimeout() işlevini kullanabilir ve istediğiniz davranışı elde edersiniz. –

+0

teşekkürler - işe yaradı! –

4

Soketiniz için 100 ms zaman aşımı belirtin. setSoTimeout

+0

, BufferedInputStream kullanıyorsanız hala geçerli mi? –

+0

Ne olursa olsun, isteğinizi yerine getirmek için yeterli miktarda bayt olsa bile, 'read()' çağrısından bir 'SocketTimeoutException 'alırsınız. Bu iyi değil. –

+0

@Code Monkey, hala herhangi bir sarmalama Giriş akışı için geçerlidir. – umbr

İlgili konular