2014-11-18 3 views
1

Прежде всего, я сделал свое исследование и полностью понял, что Java явно говорит, что этого не должно быть сделано. ссылаясь на этот вопрос здесь Can you split a stream into two streams?Вилочные потоки в java

, из-за чего я создаю приложение, в котором я хотел бы сохранить файл в месте, используя потоки (интернет, локальную файловую систему) и отобразить этот файл (обычно изображение) в JFrame. Система, которую я сейчас использую, просто объединяет их вместе, из Интернета в файл. затем из файла в локальный объект, который отправляется через прослушиватель в JFrame. Это работает, но чувствует себя очень неэффективно. Поэтому в заключение мой вопрос: есть ли более эффективный способ, по сути, разветвлять поток таким образом?

ответ

2

а) Те Java8 Streams в связанном ответ не имеют ничего общего с ввода/Outputstreams

б) это, вероятно, не то, что неэффективно, как вам нужно всего растрового изображения для изображения, чтобы отобразить его, так что начинать в то время как он полузагруженный не так полезен

c) Вы можете write to two different places at once with a TeeOutputStream.

+0

a) Я несколько раз ссылался на ответ, цитируя java-документы, объясняющие, как они не любят forking b) согласился, однако моя забота заключалась в том, что после того, как вы прочитали поток, его в баране момент, записанный в файл, забытый, а затем извлеченный из файла. неэффективность, лежащая в повторной загрузке данных, в отличие от загрузки изображения в виде массива байтов (или что-то в этом роде), затем открытие двух потоков, один для сохранения и один для отображения. c) Я продолжу свое исследование, изучая это, спасибо –

+0

a) Хорошо, эти потоки не связаны с потоками ввода-вывода. б) файл не должен быть в памяти полностью при загрузке, вы можете загружать и записывать на диск в небольших блоках. Но вы снова получаете кэш диска, когда читаете файл снова. – Thilo

+0

а) пожалуйста, извините мое невежество тогда. б) ах, я вообще не думал о кешировании! предполагая, что барабан не был проблемой вообще, и что мы работали, скажем, с 600 файлами одновременно, загружали каждый файл полностью в плунжер, прежде чем разворачивать практически все быстрее? а также для того, чтобы «TeeOutputStream» работал, я бы потребовал класс, у которого есть связанный с ним поток ввода и вывода; что-то, что просто держит все, что выводит на него как вход для более позднего. По причине «ImageIO.read», требующего входного потока. –

Смежные вопросы