BufferedInputStream не помечает - PullRequest
       6

BufferedInputStream не помечает

1 голос
/ 22 сентября 2010

BufferedInputStream, который у меня есть, не помечается правильно. Это мой код:

public static void main(String[] args) throws Exception {
    byte[] b = "HelloWorld!".getBytes();
    BufferedInputStream bin = new BufferedInputStream(new ByteArrayInputStream(b));
    bin.mark(3);
    while (true){
        byte[] buf = new byte[4096];
        int n = bin.read(buf);
        if (n == -1) break;
        System.out.println(n);
        System.out.println(new String(buf, 0, n));
    }
}

Это вывод:

11
HelloWorld!

Я хочу вывести

3
Hel
8
loWorld!

Я также попробовал код с чистым ByteArrayInputStream как bin, и он также не работал

Ответы [ 2 ]

5 голосов
/ 22 сентября 2010

Я думаю, вы не понимаете, что делает mark.

Цель mark состоит в том, чтобы заставить поток запомнить его текущую позицию, чтобы вы могли вернуться к нему позже, используя reset(). Аргумент не в том, сколько байтов будет прочитано следующим, а в том, сколько байтов вы сможете прочитать после того, как метка будет считаться недействительной (т.е. вы не сможете reset() вернуться к ней; либо получит исключение, либо закончится в начале потока).

Подробнее см. документы по InputStream . Методы mark читателей работают аналогично.

2 голосов
/ 22 сентября 2010

Это не то, что делает mark (). Вам необходимо перечитать документацию. Марк позволяет вам пройти назад через поток.

...