скопировать поток через byte [] - PullRequest
5 голосов
/ 24 августа 2010

Привет,

Мне нужно скопировать входной поток.И после небольшого поиска в сети, я попробовал это с помощью bytearray.Мой код выглядит следующим образом («is» - это входной поток):

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    while (is.read() != -1) {
        bos.write(is.read());
    }
    byte[] ba = bos.toByteArray(); 

    InputStream test = new ByteArrayInputStream(ba);
    InputStream test2 = new ByteArrayInputStream(ba);

И это работает .. почти

В обоих потоках программа копирует только каждый второй символ. Так что "DORA = "104" /> "в потоке" is "становится:" O = 14 / "в других потоках

В чем проблема?я не могу понять, что происходит.

Надеюсь, кто-нибудь может дать мне решение :)

привет

Ответы [ 2 ]

16 голосов
/ 24 августа 2010

Это потому, что вы проигнорировали все нечетные символы, если они не были -1, дважды вызвав read () в вашем цикле. Вот правильный способ использования буфера (вы можете настроить размер буфера):

int count;
byte[] buffer = new byte[8192];
while ((count = in.read(buffer)) > 0)
  out.write(buffer, 0, count);
6 голосов
/ 24 августа 2010

Вы должны присвоить байт чтения в цикле while переменной.В вашем текущем коде вы просто отбрасываете его.Правильно следующее:

int b;
while((b = read()) != -1) {
    bos.write(b);
}

Конечно, чтение отдельных байтов не очень эффективно.Вам следует рассмотреть возможность использования байтовых массивов в следующей версии.

...