Страница 1 из 1
Произвольный доступ к TReadBufStream
Добавлено: 15.08.2016 13:13:21
shyub
Не получается получить произвольный доступ к буферу файлового потока.
Код: Выделить всё
var
Stream: TFileStream;
BufStr: TReadBufStream;
I: Integer;
begin
Stream:=TFileStream.Create('My.tmp', fmOpenRead);
BufStr:=TReadBufStream.Create(Stream);
BufStr.Read(I, 4);
.......
BufStr.Seek(0,soBeginning); // Возникает ошибка.
end;
Почему-то при вызове ф-ции Seek() возникает ошибка. Что у меня не так и как с этим бороться?
Re: Произвольный доступ к TReadBufStream
Добавлено: 15.08.2016 13:31:38
runewalsh
Пишут, что он поддерживает только Seek вперёд, который эмулируется чтением и отбрасыванием нужного количества байт. Можешь не использовать, можешь написать своего наследника TBufStream (это несложно). Вообще странно, что не поддерживается изкоробки, ведь проблема вроде как исчерпывается, если ресетнуть или перечитать буфер после Seek за его пределы.
P.S. Я ещё слышал, что если ты не проверяешь результат функции, то
необходимо использовать ReadBuffer/WriteBuffer, которые бросают исключения, тогда как
Read/Write тихо возвращают прочитанное количество байт, которое может быть меньше запрошенного. Очень плохо сделали, конечно, нужно было назвать Read и TryRead.
Re: Произвольный доступ к TReadBufStream
Добавлено: 15.08.2016 15:12:07
Дож
Вообще странно, что не поддерживается изкоробки, ведь проблема вроде как исчерпывается, если ресетнуть или перечитать буфер после Seek за его пределы.
Как ресетнуть, если субстрим — это, например, поток из сокета и после первого чтения данные утрачиваются?
Re: Произвольный доступ к TReadBufStream
Добавлено: 15.08.2016 15:16:22
runewalsh
Вот субстрим пусть и бросает исключение, если не поддерживает операцию. С каких пор универсальный класс необходимо кастрировать до наименьшего общего знаменателя всего, что ему предполагается поддерживать.