The :cpp:func:`Stream::readBytes` has been virtualised and overridden for :cpp:class:`IDataSourceStream` descendents for more efficient operation, especially with ArduinoJson. For normal read operations where the stream position is to be updated, applications should use this method in preference to :cpp:func:`IDataSourceStream::readMemoryBlock`.
An addition method :cpp:func:`IDataSourceStream::moveString` has been added to support extracting the content of a memory-based stream into a String object without duplicating the data. This is supported by :cpp:class:`LimitedMemoryStream` and :cpp:class:`MemoryDataStream`.
To provide a consistent interface :cpp:type:`SeekOrigin` is now used with all seek methods for streams, and also by file system functions. Mappings are:
SeekOrigin::Start instead of eSO_FileStart
SeekOrigin::Current instead of eSO_CurrentPos
SeekOrigin::End instead of eSO_FileEnd
These map to the standard C SEEK_SET, SEEK_CUR and SEEK_END but as SeekOrigin is strongly typed
it offers compile-time checking, and has a toString(SeekOrigin)
overload.
The :cpp:func:`HttpRequest::getBody` and :cpp:func:`HttpResponse::getBody` methods have been revised to use move semantics. Previously, the data was copied into a new String which effectively doubled memory usage.
If you have set a non-memory stream type (e.g. :cpp:class:`FileStream`) which does not implement :cpp:func:`IDataSourceStream::moveString()` then an invalid String will be returned. In this situation you should use :cpp:func:`HttpResponse::getBodyStream` instead.
:cpp:func:`String toString(MimeType)` has been moved out of the ContentType
namespace,
so no longer requires the ContentType::
qualifier.