В классе FileInputStream есть метод available(), который возвращает оставшийся размер для использования.
Я пытаюсь преобразовать программу, которая использует FileInputStream, для использования FileChannel, я знаю, что мы можем потреблять FileChannel с помощью ByteBuffer, но мне интересно, как мне получить оставшиеся байты, которые будут потребляться из FileChannel, есть ли Есть идеи ?
@ user207421 исходный код, есть поток, который использует available() для подсчета того, сколько файла было использовано, «своего рода индикатор выполнения»
Ну это недействительно. available() сообщает вам, сколько данных доступно для чтения без блокировки. См. Javadoc. Если вы просто хотите знать, где вы находитесь в файле, вам просто нужно сложить все ваши счетчики чтения.
ладно @user207421 , я вижу , available() не использовался должным образом. поэтому, чтобы узнать, сколько байтов было использовано для выполнения этого индикатора выполнения, является ли добавление счетчиков чтения единственным решением?
Это единственное решение с FileInputStream. FileChannel.position() — это то, что вам нужно, если вы переходите на NIO. Я думаю, что у RandomAccessFile это тоже есть, но не цитируйте меня.




The class
FileInputStreamhas 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(), чтобы узнать, сколько байтов осталось.
Почему? 1000 к 1, что исходный код вообще не должен был использовать
available(). Есть несколько правильных примененийavailavle(), и я не могу придумать ни одного в сочетании сFileInputStream. Внимательно изучите документацию и спросите себя, действительно ли она используется правильно. Если вы покажете нам, как это используется, мы сможем показать вам, как это должно было быть сделано.