Java IO. Как получить из BufferedInputStream сам буфер?

316
24 января 2017, 22:06

Помогите разобраться я использую BufferedInputStream:

    try (BufferedInputStream in = new BufferedInputStream(
        new FileInputStream(path), 1024)) { // указал размер буфера 1024
        // я хочу прочитать из файла сразу много байт 
        //иначе зачем мне был бы нужен буфер...
        byte[] buffer = in. // и тут я столкнулся что все методы возвращают int

Так как же мне из BufferedInputStream получить сам массив байт размером 1024 ради которого я создавал эту обертку? Что я не так делаю?

Дополнение к вопросу:

Я делаю:

try (BufferedInputStream in = new BufferedInputStream(
                new FileInputStream(path), 1024)) {
            byte[] bytes = new byte[1024];
            int data = in.read(bytes,0,1024);
            while (data != -1) {
                sb.append(new String(bytes, "UTF8")); //StringBuilder
                data = in.read();
            }
            System.out.println(sb);
  1. И после вывода строки еще куча квадратов ... как мне понять что последняя часть файла уже не содержит такой длинны?
  2. Я пишу в конструкторе BufferedInputStream in = new BufferedInputStream(new FileInputStream(path), 1024) 1024 - это размер буфера как я понимаю, но и при создании массива new byte[1024] я так-же указываю длину вроде тоже размер буфера. В чем разница?
Answer 1

Методы возвращают количество прочитанных байт. Читать надо так

 count = in.read(buffer,  какого места заполнять массив>, <сколько байт прочиать>)

В count будет количество прочитанных байтов. Байты попадут в массив buffer. Если случиться конец файла, то read вернет -1.

Размер буфера для потока указывается в конструкторе потока. По умолчанию размер буфера

 private static int DEFAULT_BUFFER_SIZE = 8192;
READ ALSO
Fixtures in espresso

Fixtures in espresso

Кто применял фикстуры в своих тестах? И как правильно/можно их использовать? На сколько я понял, это значительно ускоряет процесс тестирования,...

318
JavaFX Как узнать координаты курсора, который находится в TextField?

JavaFX Как узнать координаты курсора, который находится в TextField?

Нашел только getCaretPosition(), но это немного не то

667
JavaFX - при вызове функций, которые долго выполняются, происходит ошибка &ldquo;Платформа Java не работает &rdquo;

JavaFX - при вызове функций, которые долго выполняются, происходит ошибка “Платформа Java не работает ”

Здравствуйте, пишу приложение на javaВ качестве GUI использую JavaFX (скажу сразу, что при использование swt данной проблемы нет)

284