Re: When does NSInputStream's -getBuffer:length: actually work?

2012-07-27 Thread Andreas Grosam

On 25.07.2012, at 19:08, Jens Alfke wrote:

> NSInputStream has a -getBuffer:length: method that lets you get the available 
> data from the stream without copying. This is great for performance, and I've 
> written my client code to take advantage of it if it's supported, but every 
> time I've tested, it isn't supported (i.e. just returns NO) so my code just 
> falls back to calling -read:maxLength: instead.
> 
> Does anyone know in what circumstances, or in what types of streams, this 
> method actually works?


I could imagine where this can NOT work:

In cases where the buffer is shared for input and output. Since the two streams 
could possibly execute on different threads, returning the internal buffer in 
the input stream's thread while the output stream is still executing will 
likely result in a race condition of the buffers content.

So, I would guess CFStreamCreateBoundPair and possibly all 
CFStreamCreatePairWith* won't work.


Andreas 


___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com


Re: When does NSInputStream's -getBuffer:length: actually work?

2012-07-25 Thread Wim Lewis

On 25 Jul 2012, at 10:08 AM, Jens Alfke wrote:
> NSInputStream has a -getBuffer:length: method that lets you get the available 
> data from the stream without copying. This is great for performance, and I've 
> written my client code to take advantage of it if it's supported, but every 
> time I've tested, it isn't supported (i.e. just returns NO) so my code just 
> falls back to calling -read:maxLength: instead.
> 
> Does anyone know in what circumstances, or in what types of streams, this 
> method actually works?


It sort of works for streams reading from a memory buffer, IIRC. By "sort of", 
I mean it sometimes returns data and sometimes silently discards data. I now 
avoid NSStream/CFStream unless I'm dealing with an API that requires them--- 
they seem to be an unmaintained corner of the codebase.



___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com


Re: When does NSInputStream's -getBuffer:length: actually work?

2012-07-25 Thread Thomas Davie

On 25 Jul 2012, at 18:08, Jens Alfke wrote:

> NSInputStream has a -getBuffer:length: method that lets you get the available 
> data from the stream without copying. This is great for performance, and I've 
> written my client code to take advantage of it if it's supported, but every 
> time I've tested, it isn't supported (i.e. just returns NO) so my code just 
> falls back to calling -read:maxLength: instead.
> 
> Does anyone know in what circumstances, or in what types of streams, this 
> method actually works?

I don't know for sure, but I would bet it's streams reading from files, which 
have become memory mapped.

Bob
___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com


When does NSInputStream's -getBuffer:length: actually work?

2012-07-25 Thread Jens Alfke
NSInputStream has a -getBuffer:length: method that lets you get the available 
data from the stream without copying. This is great for performance, and I've 
written my client code to take advantage of it if it's supported, but every 
time I've tested, it isn't supported (i.e. just returns NO) so my code just 
falls back to calling -read:maxLength: instead.

Does anyone know in what circumstances, or in what types of streams, this 
method actually works?

—Jens
___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com