NeGiriş akışı.read return 0 veya -1?
byte[] buffer = new byte[1024];
// this:
if (inputStream.read(buffer) > 0) { /*...*/ }
// and:
if (inputStream.read(buffer) != -1) { /*...*/ }
arasındaki fark ağ akışı sona belirleyebilir hem?
NeGiriş akışı.read return 0 veya -1?
byte[] buffer = new byte[1024];
// this:
if (inputStream.read(buffer) > 0) { /*...*/ }
// and:
if (inputStream.read(buffer) != -1) { /*...*/ }
arasındaki fark ağ akışı sona belirleyebilir hem?
InputStream.read()
için javadocs ki:
döndü, bu yüzden orada olup, sıfır ise Bu durumun açık bir şekilde test edilmesine çok fazla gerek yok. (Eğer tampon sıfır uzunluklu ve başarısız hızlı bu durumda çünkü sonsuza döngü kaçınmak istiyorsanız, sadece tampon uzunluğunu test edin.)
b
uzunluğu o zaman hiçbir byte okunur ve 0 bu hiçbir zaman olmamalıdır, Normal kullanımda
Dahası, var:
İade: arabelleğe okunan toplam bayt sayısı veya akış sonuna ulaşıldığı için daha fazla veri yoksa
-1
.
için test etmek isterseniz sonu dosyanın (veya ağ akımına ya da her neyse), test kullanın:
if (inputStream.read(buffer) != -1) ...
olmayan bir arabası Java uygulaması başka bir şey asla dönecektir Daha fazla veri bulunmadığını belirtmek için.
... bekle, ne? Son paragrafınızda '! = 0' yerine'! = -1 'yazmayı mı kastettiniz? –
@IlmariKaronen Üzgünüz, '-1' olması gerekiyor, bunun için teşekkürler. Temel olarak "dokümanlar size açıkça söylemenizi söyler." – millimoose
doc, inputstream.read(buffer) !=-1
, akışın sona erdiğini size bildirecektir. inputstream.read(buffer) == 0
sadece okunacak bayt bulunmadığını ancak akımın hala aktif olduğunu söylüyor (yani, akranız her şeyi okuyabildiğinizden beri hiçbir şey göndermedi).
'InputStream' engeller. Ne demek istediğin anlamına gelmez. – millimoose
İlki, inputstream.read() == 0' algılamıyor, bu geçerli bir yanıttır. –
Belkide> = 0 mu demek istediniz? – Gabber
http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#read%28byte[]%29. Hepsi api belgesinde açıklandı. Hiçbir veri yoksa –