SORU
4 AĞUSTOS 2009, Salı


Gelen İnputStream oluşturmak için en verimli şekilde OutputStream

Bu sayfa: 6 min

OutputStream bir İnputStream oluşturma:

new ByteArrayInputStream(out.toByteArray())

Diğer alternatifler hantal olan PipedStreams ve yeni bir iş parçacığı kullanmak için.

Bellek Bayt dizisi Yeni için kaç megabayt kopyalama fikri hoşuma gitmedi. Bunu yapmak için izin veren bir kütüphane daha var mı ?

DÜZENLEME:

Laurence Gonsalves gelen tavsiye, PipedStreams çalıştım ve o kadar zor değil çıktı. İşte clojure örnek kod:

(defn #^PipedInputStream create-pdf-stream [pdf-info]
  (let [in-stream (new PipedInputStream)
        out-stream (PipedOutputStream. in-stream)]
    (.start (Thread. #(;Here you write into out-stream)))
    in-stream))

CEVAP
4 AĞUSTOS 2009, Salı


Eğer istemiyorsan kopyala tüm verileri bir bellek arabelleği tek seferde o zaman yapman gerek kodunuzu kullanan OutputStream (yapımcı) ve kodu kullanan İnputStream (tüketici) ya da alternatif olarak aynı iş parçacığı veya ameliyat aynı anda iki ayrı iş parçacıkları. Onları aynı iplik içinde faaliyet olması muhtemelen iki ayrı iş parçacıkları kullanarak çok daha karmaşık, çok daha fazla hata (tüketici . emin olmak gerekir eğilimli ^em>aslablok giriş bekliyor, ya da etkili bir şekilde kilitlenme) ve çok sıkı eşleşmiş görünüyor aynı döngü içinde üretici ve tüketici çalışan olması gerekli olur.

Kullanmak ikinci bir iş parçacığı. Bu gerçekten o kadar karmaşık değil. Bağlandığınız web sayfası mükemmel bir örnek vardı:

  PipedInputStream in = new PipedInputStream();
  PipedOutputStream out = new PipedOutputStream(in);
  new Thread(
    new Runnable(){
      public void run(){
        class1.putDataOnOutputStream(out);
      }
    }
  ).start();
  class2.processDataFromInputStream(in);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Garrett Müller

    Garrett Mül

    26 HAZİRAN 2009
  • talkandroid

    talkandroid

    27 Mayıs 2010
  • Visual Life

    Visual Life

    3 Temmuz 2006