Currently this goes through the OFURIHandler
for file:
. This means the generic code is used that grows a buffer, while -[initWithContentsOfFile:]
is more optimized and only needs to allocate the buffer once. It would make sense to either add a specialization to fall back to -[initWithContentsOfFile:]
on file:
or to generalize it and always check if the returned stream is a OFSeekableStream
, allowing to just seek to the end of the stream to get its size. However, for networked protocols, that might have negative performance implications, so it might be safer to just add a specialization for file:
.
This is obsolete as -[initWithContentsOfFile:]
is just calling into -[initWithContentsOfIRI:]
anyway. Yes, it's possible to check the size first and allocate the buffer, but that has problems if the size changes. Hence, this is probably an optimization not worth it. Memory mapped data and strings probably make more sense.