Эквивалент метода java.io.InputStream#available() в пакете nio

В классе FileInputStream есть метод available(), который возвращает оставшийся размер для использования.

Я пытаюсь преобразовать программу, которая использует FileInputStream, для использования FileChannel, я знаю, что мы можем потреблять FileChannel с помощью ByteBuffer, но мне интересно, как мне получить оставшиеся байты, которые будут потребляться из FileChannel, есть ли Есть идеи ?

Почему? 1000 к 1, что исходный код вообще не должен был использовать available(). Есть несколько правильных применений availavle(), и я не могу придумать ни одного в сочетании с FileInputStream. Внимательно изучите документацию и спросите себя, действительно ли она используется правильно. Если вы покажете нам, как это используется, мы сможем показать вам, как это должно было быть сделано.

user207421 06.03.2019 23:43

@ user207421 исходный код, есть поток, который использует available() для подсчета того, сколько файла было использовано, «своего рода индикатор выполнения»

octopus 06.03.2019 23:47

Ну это недействительно. available() сообщает вам, сколько данных доступно для чтения без блокировки. См. Javadoc. Если вы просто хотите знать, где вы находитесь в файле, вам просто нужно сложить все ваши счетчики чтения.

user207421 06.03.2019 23:50

ладно @user207421 , я вижу , available() не использовался должным образом. поэтому, чтобы узнать, сколько байтов было использовано для выполнения этого индикатора выполнения, является ли добавление счетчиков чтения единственным решением?

octopus 07.03.2019 00:02

Это единственное решение с FileInputStream. FileChannel.position() — это то, что вам нужно, если вы переходите на NIO. Я думаю, что у RandomAccessFile это тоже есть, но не цитируйте меня.

user207421 07.03.2019 00:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
101
1

Ответы 1

The class FileInputStream has a method available() that returns the remainging size to be consumed

Это не правильная интерпретация. available() возвращает оценку количества байтов, которые можно прочитать/пропустить без блокировки потока. Как правило, это количество байтов, буферизованных в настоящий момент потоком, если таковые имеются. Он не отображает количество байтов до конца потока.

what I'm wondering is how would I get the remaining bytes to be consummed from the FileChannel

Сравните FileChannel.position() с FileChannel.size(), чтобы узнать, сколько байтов осталось.

Другие вопросы по теме