[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-i-o-nio-chto-vy-znaete-o-randomaccessfile":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},676,"chto-vy-znaete-o-randomaccessfile",15,"i-o-nio","I\u002FO & NIO","📁","Что вы знаете о RandomAccessFile?","`RandomAccessFile` — это класс из пакета `java.io`, обеспечивающий чтение и запись данных в произвольном месте файла.\n\n> Аналогия из жизни: обычный поток — это кассетная лента, которую можно только перематывать вперёд. `RandomAccessFile` — это CD-диск, где можно мгновенно перейти к любому треку.\n\nВ отличие от `InputStream`\u002F`OutputStream`, `RandomAccessFile` не является частью этих иерархий. Это полностью самостоятельный класс со своими, преимущественно нативными, методами. Такое решение обусловлено уникальным поведением: возможность перемещения по файлу вперёд и назад принципиально отличается от последовательного потокового чтения\u002Fзаписи.\n\n### Специфические методы\n\n| Метод | Назначение |\n|---|---|\n| `getFilePointer()` | Возвращает текущую позицию в файле |\n| `seek(long pos)` | Перемещает указатель на указанную позицию |\n| `length()` | Возвращает размер файла в байтах |\n| `setLength(long newLength)` | Устанавливает размер файла (обрезает или расширяет) |\n| `skipBytes(int n)` | Пропускает указанное количество байт |\n| `getChannel()` | Возвращает связанный `FileChannel` для NIO-операций |\n\nКласс также предоставляет методы для типизированного чтения (`readInt()`, `readLong()`, `readUTF()`, `readLine()`) и записи (`writeInt()`, `writeLong()`, `writeUTF()`), аналогичные `DataInputStream`\u002F`DataOutputStream`.\n\n### Пример: чтение записи по смещению\n\n```java\ntry (RandomAccessFile raf = new RandomAccessFile(\"records.dat\", \"r\")) {\n    int recordSize = 100; \u002F\u002F каждая запись 100 байт\n    int recordNumber = 42;\n    raf.seek((long) recordNumber * recordSize);\n    int id = raf.readInt();\n    String name = raf.readUTF();\n}\n```\n\nНа практике `RandomAccessFile` используется для работы с файлами фиксированной структуры (индексные файлы, базы данных), при реализации файлового кэша и при необходимости изменять данные в середине файла без перезаписи всего файла.\n\n> **На собеседовании:** подчеркните, что `RandomAccessFile` не входит в иерархию InputStream\u002FOutputStream, поддерживает произвольный доступ через `seek()` и `getFilePointer()`, и требует указания режима доступа в конструкторе.","","middle",[15,16,17],"core","file","io",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":35,"featuredSnippetReady":36},"RandomAccessFile в Java — Gymterview","RandomAccessFile: произвольный доступ к файлу через seek() и getFilePointer(). Не входит в иерархию InputStream\u002FOutputStream. Режимы доступа, пример.","RandomAccessFile — произвольный доступ к файлу — Gymterview","RandomAccessFile: чтение и запись в произвольном месте файла. Методы seek(), getFilePointer(), режимы доступа r\u002Frw\u002Frws\u002Frwd.",[26,27,28,29,30,31,32,33,34],"RandomAccessFile","seek","getFilePointer","произвольный доступ","файл","чтение запись","Java IO","бинарный файл","собеседование","RandomAccessFile — класс java.io для чтения и записи в произвольном месте файла. Не входит в иерархию InputStream\u002FOutputStream. Ключевые методы: seek(long) — перемещение позиции, getFilePointer() — текущая позиция, length() — размер файла, skipBytes(int). Поддерживает типизированное чтение\u002Fзапись (readInt, writeUTF). Конструктор требует режим доступа (r, rw, rws, rwd).",true]