Чтение/запись байтов в файл с помощью класса FileStream

Класс FileStream определяет два метода, которые могут считывать байты из файла: ReadByte () и Read (). Для считывания одного байта из файла используется метод ReadByte ():

int ReadByte()

Каждый раз при вызове этого метода из файла считывается один байт, который возвращается в виде целочисленного значения. Если при этом встречается признак конца файла, возвращается значение -1. В случае возникновения ошибки генерируется исключение IOException.

Для считывания блока байтов используется метод Read ():

int Read(byte[] buf, int offset, int numBytes)

Метод Read () предпринимает попытку считать байты, количество которых определяется параметром numBytes, из файла в буфер but, начиная с позиции, заданной параметром offset. При этом возвращается количество успешно считанных байтов. В случае возникновения ошибки ввода/вывода генерируется исключение IOException. Возможны и другие исключения, в том числе исключение NotSupportedException, генерируемое в случае, когда операция чтения не поддерживается потоком.

Для записи байтов в файл используется метод WriteByte ():

void WriteByte(byte val)

Этот метод записывает байт, указанный параметром val, в файл. Если при записи возникла ошибка, генерируется исключение IOException. Если поток вывода не открыт, генерируется исключение NotSupportedException.

Байтовый массив может быть записан в файл с помощью метода Write():

int Write(byte[] buf, int offset, int numBytes)

Метод Write () записывает в файл количество байтов, указанное параметром numBytes, из массива buf, начиная с позиции, которая задана с помощью параметра offset. При этом возвращается количество записанных байтов. Если в процессе записи происходит ошибка, генерируется исключение IOException. Если поток вывода не открыт, генерируется исключение NotSupportedException.

При выполнении вывода в файл часто данные не записываются сразу же на физическое устройство. Вместо этого вывод буферизуется операционной системой до тех пор, пока не накопится достаточно большой фрагмент данных, который сразу же записывается на диск. В результате возрастает производительность системы. Однако если требуется, чтобы данные записывались на физическое устройство независимо от степени заполнения буфера, можно воспользоваться методом Flush ():

void Flush ()

Если при выполнении этой операции возникает ошибка, генерируется исключение IOException.

По завершении операции вывода файла необходимо его закрыть, воспользовавшись методом Close (). При этом гарантируется, что любые выводимые данные, находящиеся в буфере, будут записаны в файл. Поэтому не стоит вызывать метод Flush () перед закрытием файла.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: