в чем особенность randomaccessfile
Русские Блоги
RandomAccessFile подробное объяснение и его отличие с FileOutPutStream
Справочные документы:https://www.cnblogs.com/guweiwei/p/6526268.html
Справочный документ:http://blog.sina.com.cn/s/blog_14ffae8a60102x2zf.html
RandomAccessFile используется для доступа к файлам, которые сохраняют записи данных, вы можете использовать метод seek () для доступа к записям, а также для чтения и записи. Размер этих записей не обязательно должен быть одинаковым, но их размер и местоположение должны быть известны. Но этот класс ограничен рабочими файлами.
RandomAccessFile не принадлежит к InputStream и OutputStream. Фактически, помимо реализации интерфейсов DataInput и DataOutput (DataInputStream и DataOutputStream также реализуют эти два интерфейса), он не имеет ничего общего с этими двумя классами и даже не использует никаких функций, которые уже существуют в классах InputStream и OutputStream; Это полностью независимый класс, и все методы (большинство из которых принадлежат ему) написаны с нуля. Это может быть связано с тем, что RandomAccessFile может перемещаться вперед и назад в файле, поэтому его поведение в корне отличается от других классов ввода-вывода. Короче говоря, это независимый класс, который напрямую наследует Object.
По сути, метод RandomAccessFile работает так: объединение DataInputStream и DataOutputStream, а также некоторых собственных методов, таких как getFilePointer () для позиционирования, seek () для перемещения в файлах и length () для оценки размера файлов. ), SkipBytes () сколько байтов пропустить. Кроме того, его конструктор также имеет параметр, который указывает, открывать ли файл в режиме только для чтения («r») или в режиме чтения-записи («rw») (что в точности совпадает с fopen () в C). Он не поддерживает только написание файлов.
Большинство функций RandomAccessFile, но не все из них, были заменены «отображаемыми в память файлами» из nio JDK 1.4.Вы должны рассмотреть, следует ли использовать «отображаемые в память файлы» вместо RandomAccessFile.
На самом деле, приведенные выше требования очень просты: если мы используем класс RandomAccessFile в системе ввода-вывода JAVA, мы можем достичь нулевого добавления памяти. Фактически, это сила поддержки произвольного чтения и письма.
Если мы хотим получить доступ только к части файла, а не к чтению файла от начала до конца, использование RandomAccessFile принесет более сжатый код и лучшую производительность.
Давайте посмотрим на два более важных метода в классе RandomAccessFile, остальные похожи на обычный ввод-вывод, здесь они не будут описаны подробно.
Название метода Функция
getFilePointer () возвращает текущую позицию указателя записи файла
seek (long pos) Установить указатель записи файла в положение pos
1. Функция одна, читать данные в любой позиции
2. Функция вторая, дополнительные данные
3. Функция три, вставьте данные в любом положении
Уровень 32. Ответы на вопросы к собеседованию по теме уровня
Создаст новый и запишет в него.
The Java.io.StringReader class is a character stream whose source is a string.
Представляет собой поток символов, чей источник называется строкой
public class StringWriter
extends Writer
A character stream that collects its output in a string buffer, which can then be used to construct a string.
Closing a StringWriter has no effect. The methods in this class can be called after the stream has been closed without generating an IOException.
Поток символов, собирающий свой поток в буфер строк, которые затем могут быть использованы для создания строки.
StringWriter писал символы (char) в строку, а ByteArrayOutputStream пишет байты в массив байт у него внутри. При записи в StringWriter строка внутри него удлинялась, а при записи в ByteArrayOutputStream его внутренний массив байт тоже динамически расширяется.
В Java есть специальный класс (java.lang.reflect.Proxy), с помощью которого фактическиможно сконструировать объект во время исполнения программы (динамически), не создавая для него отдельного класса.
Как работает RMI?
RMI расшифровывается Remote Method Invokation – удаленный вызов методов. Или другими словами RMI – это механизм, который позволяет объекту в одной Java-машине вызывать методы объекта в другой Java-машине, даже если они находятся на разных компьютерах, в разных странах, на разных сторонах земного шара.
Традиционный подход к выполнению кода на других машинах, разнесенных по сети может смутить из-за своей нудной и склонной к ошибкам реализации. Лучший способ рассмотреть эту проблему состоит в предположении, что некоторые объекты располагаются на другой машине, и что вы можете посылать сообщения этим удаленным объектам и получать результат, как будто они располагаются на вашей локальной машине. Это упрощение в точности является тем, что позволяет делать Удаленный Вызов Методов (RMI) в Java.
Вот статья по созданию собственной реализации RMI: Удаленный вызов методов (RMI)
Объекты каких типов можно передавать по RMI?
Объекты должны имплементировать интерфейс Serializable
Remote method Invocation — механизм, который позволяет вызывать метод удалённого объекта. Согласно ему, все операции по подготовке и передаче данных инкапсулируются в вызываемом методе клиентского объекта-заглушки (stub). Сам же вызов метода ничем не отличается от вызова метода обычного локального объекта, за небольшим исключением:
Так же нужно отметить, что при вызове метода мы работаем с удалённым интерфейсом, а не с удалённым классом.
Урок 4. RandomAccessFile и его возможности
Мы продолжаем серию уроков пакета IO, и в этом уроке мы познакомимся с более интересным классом данного пакета, который называется RandomAccessFile.
RandomAccessFile – класс пакета Java IO API, он позволяет перемещаться по файлу, читать из него или писать в него, как вам будет угодно. Вы также сможете заменить существующие части файла, речь идет о обновлении содержимого файла, а точней о обновлении фрагмента файла. Это невозможно сделать с помощью FileInputStream или FileOutputStream, но RandomAccessFile даст вам эту возможность.
Шаг 1
Как во всех уроках, первый шаг – создаем проект. И в нем один Main класс, в нем мы будем тестировать возможности RandomAccessFile. Но мы не будим писать сразу в main метод код, а создадим новый класс в котором опишем нужный нам функционал, и уже в методе main мы будем его проверять.
Структура проекта простая:
Как видите у нас есть два класса, где класс Main имеет метод main(String[] args) в котором мы и будем проверять роботу методов класса WorkWithFile.
Шаг 2
Открываем класс WorkWithFile и пишем следующее содержимое:
Шаг 3
Теперь в классе Main в методе main() проверим работу наших методов класса WorkWithFile:
Random Access File Class
Definition
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Instances of this class support both reading and writing to a random access file.
Remarks
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
Constructors
Creates a random access file stream to read from, and optionally to write to, the file specified by the File argument.
A constructor used when creating managed representations of JNI objects; called by the runtime.
Creates a random access file stream to read from, and optionally to write to, the file specified by the File argument.
Properties
Returns the unique java.nio.channels.FileChannel FileChannel object associated with this file.
Returns the opaque file descriptor object associated with this stream.
Returns the current offset in this file.
The handle to the underlying Android instance.
(Inherited from Object)
This API supports the Mono for Android infrastructure and is not intended to be used directly from your code.
This API supports the Mono for Android infrastructure and is not intended to be used directly from your code.
Methods
Creates and returns a copy of this object.
Closes this random access file stream and releases any system resources associated with the stream.
Indicates whether some other object is «equal to» this one.
Returns a hash code value for the object.
Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
Returns the length of this file.
Wakes up a single thread that is waiting on this object’s monitor.
Wakes up all threads that are waiting on this object’s monitor.
Reads a byte of data from this file.
Reads a byte of data from this file.
Reads a byte of data from this file.
Reads a boolean from this file.
Reads a signed eight-bit value from this file.
Reads a character from this file.
Reads a double from this file.
Reads a float from this file.
Reads b.length bytes from this file into the byte array, starting at the current file pointer.
Reads b.length bytes from this file into the byte array, starting at the current file pointer.
Reads a signed 32-bit integer from this file.
Reads the next line of text from this file.
Reads a signed 64-bit integer from this file.
Reads a signed 16-bit number from this file.
Reads an unsigned eight-bit number from this file.
Reads an unsigned 16-bit number from this file.
Reads in a string from this file.
Sets the file-pointer offset, measured from the beginning of this file, at which the next read or write occurs.
Sets the Handle property.
Sets the length of this file.
Attempts to skip over n bytes of input discarding the skipped bytes.
Returns a string representation of the object.
(Inherited from Object)
Causes the current thread to wait until another thread invokes the java.lang.Object#notify() method or the java.lang.Object#notifyAll() method for this object.
Causes the current thread to wait until another thread invokes the java.lang.Object#notify() method or the java.lang.Object#notifyAll() method for this object.
Causes the current thread to wait until another thread invokes the java.lang.Object#notify() method or the java.lang.Object#notifyAll() method for this object.
Writes the specified byte to this file.
Writes the specified byte to this file.
Writes the specified byte to this file.
Writes a boolean to the file as a one-byte value.
Writes a byte to the file as a one-byte value.
Writes the string to the file as a sequence of bytes.
Writes a char to the file as a two-byte value, high byte first.
Writes a string to the file as a sequence of characters.
Writes an int to the file as four bytes, high byte first.
Writes a long to the file as eight bytes, high byte first.
Writes a short to the file as two bytes, high byte first.
Writes a string to the file using
Explicit Interface Implementations
IJavaPeerable.Disposed() | (Inherited from Object) |
IJavaPeerable.DisposeUnlessReferenced() | (Inherited from Object) |
IJavaPeerable.Finalized() | (Inherited from Object) |
IJavaPeerable.JniManagedPeerState | (Inherited from Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) | (Inherited from Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) | (Inherited from Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) | (Inherited from Object) |
Extension Methods
Performs an Android runtime-checked type conversion.
Русские Блоги
RandomAccessFile подробное объяснение
Распространенное использование RandomAccessFile
1. Введение в RandomAccessFile
1.1 Зачем использовать RandomAccessFile
Обычно мы создаем файлы, связанные с объектами потока, начинаем чтение или запись файлов с самого начала, а не с середины, если нужно открыть многопоточную загрузку файла, FileWriter или FileReader, которые мы изучили ранее, не могут быть завершены, и текущее введение RandomAccessFile может решить эту проблему, поскольку он может читать в указанном месте и записывать класс в указанном месте. Обычно в процессе разработки он в основном используется для многопоточной загрузки большого файла.
Метод построения: RandomAccessFile raf = newRandomAccessFile (Файловый файл, строковый режим);
Значение параметра mode может быть «r»: читаемый, «w»: записываемый, «rw»: читабельный;
Seek (int index); Вы можете переместить указатель в определенную позицию, чтобы начать чтение и запись;
SetLength (long len); Зарезервировать место для записи файлов:
2. Особенности и преимущества RandomAccessFile
У этого объекта есть два преимущества
RandomAccessFile не принадлежит к системе классов InputStream и OutputStream. Это полностью независимый класс. Все методы (большинство из них принадлежат только самому себе) задаются с нуля сами по себе, включая операции чтения и записи.
2. Может читать и писать в указанном месте
RandomAccessFile может перемещаться по файлу вперед и назад, а seek () используется для перемещения по файлу, поэтому его поведение принципиально отличается от других классов ввода-вывода. В общем, это независимый класс, напрямую наследующий Object. Только RandomAccessFile имеет метод поиска, и этот метод применяется только к файлам.
3. Примеры использования, чтобы ознакомиться с наиболее распространенными операциями RandomAccessFile.
Сначала создайте класс DownLoadThread, наследующий Thread
Затем определите основной метод для проверки файла
После открытия файла указатель файла указывает на начало файла, то есть указатель = 0, который можно просмотреть с помощью метода getFilePointer () объекта RandomAccessFile.
пример: Создайте и откройте файл данных.
3. Операция записи
Кроме того, каждый раз при записи байта указатель файла указывает на следующий байт.
пример: Запишите целое число в файл с помощью метода write (). (Используйте объект, созданный в примере выше)
пример: Ниже приведено тело метода writeInt () в классе RandomAccessFile.
4. Прочтите операцию
Подобно операции записи, операция чтения реализуется с помощью метода read (), по одному байту за раз, и указатель файла указывает на следующую позицию (указатель перемещается в позицию чтения с помощью метода seek ()). В то же время класс RandomAccessFile также инкапсулирует серию методов readXxx () для удобного чтения.Принцип и метод использования могут относиться к операции записи, которая в основном аналогична.
пример: Прочтите все данные в файле данных в целочисленной форме.
5. Закройте файл.
Открытый файл необходимо закрыть с помощью функции close (), иначе могут возникнуть непредвиденные ошибки.
4. Отображение эффекта
5. Резюме
Из приведенного выше анализа мы можем увидеть две основные характеристики RandomAccessFile:
1. Вы можете указать место для начала операции;
2. Оба могут читать и писать;
Интеллектуальная рекомендация
Используйте шаблон состояния вместо if else
Большинство разработчиков все еще используютif elseСтруктура процесса, виделиjdonизbanqСтатья написана Большим Братом, используяcommand,aopЗамена шаблонаif elseСтруктура процесса. Я не совсем понял эт.
Рыба образования, средняя школа закончила в учебном класс, как найти первую работу.
Self-брат Я девять ноль, теперь занимается разработкой веб-конца Java. Некоторое понимание и восприятие учебных курсов. Учебное заведение является ямой, дорога, что вы уже прошли, только вы знаете, дл.
Синглтон паттерн в питоне
Java Counce Collection
TRUEEWAP основан на реализации красных навигаций. Это отображение отсортировано в соответствии с его природооформленным порядком или отсортировано в соответствии с компаратором, предусмотренным при со.
Вам также может понравиться
1. Связанные классы и методы: java.lang.reflect.Proxy, Прокси предоставляет статические методы для создания динамических прокси-классов и экземпляров. newProxyInstance() Возвращает экземпляр прокси-кл.
Юля: Об изменениях в Array 1.0
Версии до 1.0, например 0.2-0.6, Но теперь 1.0 это сообщит об ошибке. Это использование претерпело серьезные изменения! такие как: Это можно считать серьезным изменением.
студия Android генерирует статическую библиотеку jni
Android Сяобай, который только что вошел в общество, описывает, как использовать студию Android для создания статической библиотеки jni. 1. Подготовка: Сначала установите ndk, сначала сами Baidu, позж.
Nginx 502 раствор
Общие решения Nginx 502 Bad Gateway следующие: Nginx 502 Ошибка 1: Количество сайтов велико, а количество PHP-CGI мало. Для этой 502 ошибки просто увеличивайте количество процессов PHP-CGI. В частност.