2010-12-09 2 views
2

У меня есть класс CBZip2OutputStream из библиотеки apache bzi2, он может преобразовывать поток двоичных данных в поток данных bzi2. Но мне нужно архивировать строку. Поэтому, я думаю, я должен создать поток ввода из этого выходного потока, записать эти данные в выходной поток и прочитать архивные данные из входного потока ... но как связать выходной поток и входной поток?Java: OutputStream и InputStream

ответ

1

Во-первых, вы, вероятно, хотите DataOutputStream: он предназначен для приема примитивов и объектов и преобразования их в байты. Он также обрабатывает строки.

Далее следует использовать сквозной ввод-вывод: PipedInputStream и PipedOutputStream. Вы можете использовать их для связывания потоков вместе, аналогично подключению трубопроводов от одного процесса к другому из командной строки.

2

Вы можете просто прочитать поток ввода и записать в выходной поток. Это обычная практика. IOUtils.copy() (из jakarta commons) делает это, поэтому вам не нужно выполнять цикл.

В качестве альтернативы вы можете использовать PipedInputStream и PipedOutputStream.

0

Вы можете использовать несколько методов для получения InputStream из OutputStream.

  • записать данные в буфер памяти (ByteArrayOutputStream), получить byteArray и прочитать его снова с помощью ByteArrayInputStream. Это лучший подход, если вы уверены, что ваши данные вписываются в память.
  • скопируйте свои данные во временный файл и прочитайте его.
  • использовать трубы: это лучший подход как к использованию памяти, так и к скорости (вы можете в полной мере использовать многоядерные процессоры), а также стандартное решение, предлагаемое Oracle.
  • использовать «круговые буферы» или трубы через внешнюю библиотеку.

Адрес complete tutorial.

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