В названии вопроса указан метод, который используется в решении к этой задаче. Почему мы не могли просто использовать raf.write(readBytes)? Мы же здесь записываем байты до того момента, пока не забьется полностью буфер, или я не прав? По крайней мере, так происходит с методом read(), когда мы сначала считываем в буфер значения, а потом уже можем работать с этим буфером.
Solaire
42 уровень
raf.write(readBytes, 0, text.length())
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
ДмитрийExpert
20 июня 2024, 20:12
А скинь само условие, пожалуйста. Не могу загрузить эту задачу, так как курс немного отличается.
0
Solaire
21 июня 2024, 16:35
В метод main приходят три параметра:
1) fileName - путь к файлу;
2) number - число, позиция в файле;
3) text - текст.
Считать текст с файла начиная с позиции number, длиной такой же как и длина переданного текста в третьем параметре.
Если считанный текст такой же как и text, то записать в конец файла строку 'true', иначе записать 'false'.
Используй RandomAccessFile и его методы seek(long pos), read(byte[] b, int off, int len), write(byte[] b).
Используй один из конструкторов класса String для конвертации считанной строчки в текст.
Требования:
• В методе main класса Solution необходимо использовать RandomAccessFile, который должен использовать файл, который приходит первым параметром.
• В методе main класса Solution программа должна устанавливать позицию в файле, которая передана во втором параметре.
• В методе main класса Solution программа должна считывать данные с файла при помощи метода read(byte[] b, int off, int len).
• Запись должна происходить в конец файла.
• Если считанный текст такой же как и text, то программа должна записать в конец переданного файла строку 'true'.
• Если считанный текст НЕ такой же как и text, то программа должна записать в конец переданного файла строку 'false'.
0
ДмитрийExpert
22 июня 2024, 05:16
Ага, теперь более-менее понятно.
В данной задаче действительно есть необходимость контролировать количество байт, которые мы читаем и пишем, чтобы корректно сравнивать строки и добавлять результат в конец файла. Метод raf.write(byte[] b, int off, int len) используется для записи определенного количества байт из массива b, начиная с позиции off и длиной len. В твоём случае нужно записать точно столько же байт, сколько содержит строка text.
Теперь по поводу использования raf.write(readBytes, 0, text.length()) вместо raf.write(readBytes). Действительно, метод raf.write(readBytes) будет записывать весь массив readBytes. Однако в данном контексте это не имеет смысла, поскольку мы уже знаем точную длину строки, которую нужно записать (длина строки text), и нет необходимости пытаться записывать лишние байты.
Метод raf.write(byte[] b, int off, int len) позволяет более точно контролировать количество байт для записи, что особенно полезно при работе с частями массива. Это аналогично тому, как мы используем метод raf.read(byte[] b, int off, int len) для чтения определенного количества байт в буфер.
Таким образом, использование raf.write(readBytes, 0, text.length()) гарантирует, что будет записано ровно столько байт, сколько необходимо, что исключает возможность записи лишних данных и гарантирует корректность выполнения задачи.
0
ДмитрийExpert
22 июня 2024, 05:20решение
Если резюмировать, то добавлю ещё вот что. Эту задачу можно было бы решить несколькими способами. Никто не мешает спроектировать алгоритм, который будет записывать данные по одному байту и добьётся точно такого же результата. Полагаю, что в решении был выбран наиболее оптимальный вариант с точки зрения авторов. В целом, в этом есть логика и я бы применил точно такое же решение.
+2