2012-10-31 28 views
8

Bir işlemin çıktı ve hata akışlarından okumak ve bunları bir metin akışıyla birleştirmek istiyorum. Benim program harika olduğunu ve böyle okur:İş parçacığı güvenli ByteArrayOutputStream nedir?

def mergeStream = new ByteArrayOutputStream() 
process.waitForProcessOutput(mergeStream, mergeStream) 

sorun ByteArrayOutputStream güvenli ve waitForProcessOutput iplik olmamasıdır() mergeStream eklenecek iki konuları oluşturur. Kullanabileceğim bir iş parçacığı var mı var? MergeStream'e erişimi kontrol etmeyi başka nasıl önerirsiniz? Pratikte, karakterlerin bazen bu uygulama ile düştüğü görülmektedir. process.waitForProcessOutput() argüman olarak bir OutputStream alırsa

+2

ProcessBuilder'ın redirectErrorStream'ını düşündünüz mü? – artbristol

+0

Evet, * iş parçacığı güvenlidir veya tüm yöntemleri senkronize edilir ve 'ProcessBuilder.redirectErrorStream()' sorunuzu gereksiz kılar. Gerçek bir soru değil. – EJP

+1

@EJP - cevabı biliyorsanız, sadece "gerçek bir soru" değil - aksi halde, BÜYÜK bir soru! Javadoc, senkronize edilmesine dair hiçbir şey söylemiyor - AFAICT, bunu bulmak için kaynağında kazmanız gerekiyor ve asla rahatsız etmem (hiçbir şey söylemediğinden, dokümanlar bir şey söylemediğinden) hiç yorum yapmamış olsaydınız. –

cevap

7

, sadece senkronize tüm yöntemleri vardır OutputStream özel olarak uygulanması kullanın ve bir sarılmış ByteArrayOutputStream ilgili metot ile temsilci olabilir. Tıpkı Collections.synchronizedList() gibi başka bir Listeyi senkronize edilmiş bir Liste proxy'sine kaydırır.

DÜZENLEME: Zaten iş parçacığı güvenli yüzden ByteArrayOutputStream kaynağını okuma söyledi

, tüm yöntemler zaten senkronize edilir. Senin hatan muhtemelen başka bir yerden geliyor.

İlgili konular