alt kümelerindeki verilerin güçlü bir şekilde atlanması İkili bir akışı işliyorum ve ilgilenmeyeceğim bir veri aralığını verimli bir şekilde atlatarak işlenecek bazı verilere geçmem gerekiyor. Bir java.io.InputStream ve alt türlerinde
InputStream.skip(long)
atlar üzerinde ve ıskarta n byte Bu giriş akımından. Atlama metodu, çeşitli nedenlerden ötürü, muhtemelen daha az sayıda baytın üzerinde atlama yapabilmektedir. Bu muhtemelen bir takım koşullardan kaynaklanabilir; n bayttan önce dosyanın sonuna ulaşılması sadece bir olasılıktır. Atlanan gerçek bayt sayısı döndürülür.
iki nedenden oturum ettiğini bilmek gerekir:
- akışı
- bayt Yeterince basit
atlandı erdi. Bununla birlikte, bu açıklamada ortaya çıkan cansızlık, örneğin, BufferedInputStream
'un sadece bir kaç baytı atlayıp geri dönebileceği anlamına gelir. Tabii ki, bana sadece birkaçını atladığını söylüyor, ama nedenini açık değil.
Bu yüzden sorum şu: InputStream.skip(long)
'u, akış sona erdiğinde veya atlama başarılı bir şekilde tamamlandığında ne şekilde kullanabileceğinizi bilerek kullanabilir misiniz?
Cevabınız, endişelendiğim şeyleri somut olarak detaylandırıyor. Uygulamada çalışmak için _seems_ kodunu gönderdim, ancak 'InputStream' uygulamasının tüm uygulamaları için çalışacağından emin değilim. Uzantınız ilginç görünüyor ve kısa bir süre içinde [ihtiyacım olan sınıfta] deneyeceğim (https://code.google.com/p/metadata-extractor/source/browse/Source/com/drew/lang/ StreamReader.java). Şu anda benim API'm sıranın başarılı olup olmadığını bildirmeye çalışıyor, bu yüzden garanti mümkün değilse istemci kodunu değiştirmem gerekebilir. Çok teşekkürler. –
'FileInputStream.skip()' meselesini düzeltebilirsiniz: 'n-1' bayt için' while' döngüsünü kullanın; sonra, döngüden sonra, bir kez 'in.read()' yi çağır. '-1' değerini döndürürse, atlamanız EOF'ye çarptı, aksi takdirde atlama başarılı oldu. Ayrıca, üstte bir n == 0' kontrol etmeyi unutmayın. –
@KannanGoundan İlginç bir öneri. Bir dezavantaj, elbette, bazı senaryolarda, performansı etkileyebilecek olan akıştan en az iki okuma (bir "atlama" artı bir "okuma") gerektirmesidir. – leonbloy