Bir nesneyi 350 KB büyüklüğündeki bir dosyadan serileştiriyorum ve uzun bir zaman alıyor. Bilgisayar bilimi TA, bana büyük ölçüde performansı artırmak için ObjectInputStream ile birlikte Tamponlu bir okuyucu kullanmanın bir yolu olduğunu söyledi. Bununla birlikte, bu konuda Google'da bir şey bulamıyorum.Arabelleğe alınmış bir ObjectInputStream var mı?
cevap
Giriş akışını tamponlamak için süslemeyi kullanırsınız. Bu
InputStream in = ...; // your underlying stream (e.g. FileInputStream)
ObjectInputStream oin = new ObjectInputStream(new BufferedInputStream(in));
gibi bu ObjectInputStream her çağrı böyle OS'nin dosya okuma sistemi araması olarak baz akışı in
, çağırmaz sağlayacaktır. Bunun yerine, her çağrı, veri bloklarını (varsayılan olarak 8K) getirip önbelleğe alan tamponlanmış girdi akışına gider ve bundan okur. Bu, daha hızlıdır çünkü akıştan okuma, şimdi java'da yerel bir yöntem çağrısıdır ve yöntem çağrısı, daha az sıklıkla bir sistem çağrısının yükü ile karşılaşır. Önbellek tutarlılığı ve JIT optimizasyonları da performansın iyileştirilmesinde devreye giriyor.
Resim ancak yukarıdaki kurucu bağımsız değişken olarak BufferedInputStream geçirerek akımı intput resimler tamponlu nesne oluşturmak için ObjectInputStream (içinde inputStream) yapıcı
kullanabilir.
InputStream file = null;
try {
file = new FileInputStream("Out.test");
InputStream buffer = new BufferedInputStream(file);
ObjectInputStream in = new ObjectInputStream(buffer);
vector = (Vector)in.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally{
if(file != null) {
file.close();
}
}
Ödeme Aşağıdaki bağlantı: Burada
dosyadan seri nesneleri okumak için bir örnektir
http://java.sun.com/docs/books/performance/1st_edition/html/JPIOPerformance.fm.html
"Dosya" beyanı satırından sonra bir try try {'ve son olarak {file.close(); } 'in .close();' yerine. –
Bu kod kesinlikle derlenmeyecektir, çünkü 'nihayet' bloğunda 'dosya' bildirilmemiş. – uckelman
@uckelman Şimdi kod derlemelidir. Daha önce ref kodu koydum ama aynı test/derleme yapmadım. – YoK
- 1. JFileChooser resmi arabelleğe alınmış görüntüye
- 2. Döndürülmüş arabelleğe alınmış görüntü başka bir arabelleğe alınmış resimde nasıl kaydedilir?
- 3. Satır arabelleğe alınmış verileri blok arabelleğe alınmış verilere karşı dosyadan programa nasıl yönlendirilir?
- 4. Bir arabelleğe yama uygulamak için elisp'te bir işlev var mı?
- 5. Bir vim komutunun çıktısını arabelleğe yapıştırmanın bir yolu var mı?
- 6. Önbelleğe alınmış içeriği okumak için bir google API var mı?
- 7. Tam olarak tamponlanmış, çizgi arabelleğe alınmış ve arabelleğe alınmamış C cinsinden ortalama nedir?
- 8. Java - ObjectInputStream ile bir soketin dinlenmesi
- 9. C# Değişkenler çöp oluşturmadan arabelleğe kopyalansın mı?
- 10. Python'da sabit hesaplamalar önbelleğe alınmış mı?
- 11. Sucker Punch'ı Etkin İş ile Kullanma, Kuyruğa alınmış bir işi iptal etmenin bir yolu var mı?
- 12. Bir seri arabelleğe serileştirme vektörü <int32_t> hakkında mı?
- 13. System.Runtime.Caching'de bir çeşit CacheDependency var mı?
- 14. Sınırlı bir veri türü tarafından dizine alınmış diziler onarılsın mı?
- 15. iOS6 - Ana ekrana eklenen webapp için önbelleğe alınmış ajax POST isteklerinin temizlenmesinin bir yolu var mı?
- 16. DBSet sorgusunda yerel olarak önbelleğe alınmış öğeleri dahil etmenin bir yolu var mı?
- 17. Emacs lisp'de bir işlevi tanımlamanın bir yolu var mı?
- 18. Düğüm arabelleğe dönüştür Düğüm
- 19. JSON Nesnesini Arabelleğe ve Arabelleğe Dönüştürme JSON nesnesine geri dön
- 20. Nautilus açık dosyasını yeni gvim arabelleğe aldınız mı?
- 21. Belirli bir arabelleğe nasıl bir komut gönderirim?
- 22. TypeError Unicode için kodlama: dize veya arabelleğe gereksinim var
- 23. - Bir fark var mı?
- 24. Ostream nesnesini geçici bir arabelleğe nasıl yönlendirilir?
- 25. ActiveRecord modelleri komisyon görevleri için önbelleğe alınmış mı?
- 26. AudioRecord - veri arabelleğe nasıl alınır?
- 27. global.asax içinde Application_OnStart önbelleğe alınmış sayfalarla çalışır mı?
- 28. Bir protokole jenerik tip parametresi eklemenin bir yolu var mı?
- 29. Android AudioTrack arabelleğe yükleme sorunları
- 30. android.media.MediaPlayer ile arabelleğe alma sorunları
'ObjectInputStream' 1k tamponu da zaman en azından bir kısmını kullanır, bu nedenle bu öneri Burada önerildiği gibi dramatik bir etki olmayacaktır. – EJP
@EJP Bu çözüm, BufferedReader'da 'readLine()' yöntemi gibi satırların yanı sıra Nesneleri okumak için yeterince verimli olacak mı? –