Potrzebuję odrodzenia N wątków konsumenckich, które przetwarzają ten sam InputStream jednocześnie, np. - przekształć go w jakiś sposób, obliczyć sumę kontrolną lub podpis cyfrowy itp. Konsumenci nie zależą od siebie nawzajem i wszystkich z nich korzystają z bibliotek innych firm, które akceptują InputStream jako źródło danych.Równoczesne przetwarzanie pojedynczego strumienia InputStream z niezależnymi klientami
Więc co mogę zrobić, to - tworzyć pewną realizację InputStream, który
- Przeczytaj fragment danych z „macierzystego” strumień
- odblokowywanie konsumentów
- czekać aż do każdego konsumenta przeczytać cały fragment
- odczytywania następnego klocek
będąc szuka prosty, może rosnąć różne problemy, takie jak livelo ck, gdy pewna klientka umiera, zaimplementuj wszystkie metody InputStream, steruj widelcem/złączem samych konsumentów za pomocą zapór/zatrzasków itp.
Jeden kumpel powiedział mi, że to pół godziny na wdrożenie, to sprawiło, że mój wieczór.
Wolałbym użyć czegoś wystarczająco dojrzałego (google nie przyniosło rezultatów, mój google-fu nie jest wystarczająco dobry?) Lub nie zawracaj sobie głowy i skopiuj cały "źródłowy" strumień do pliku tymczasowego i używać go jako źródła danych. To drugie rozwiązanie wydaje się bardziej niezawodne, ale może skończyć się tworzeniem plików gigabajtowych (na przykład podczas przetwarzania strumieniowego audio).
Czy możesz zapisać dane do pliku i odradzić N FileInputStreams? –
@ JonLin Tak jak powiedział pod koniec pytania, może. –