• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Is there a more efficient way to get the first 4 bytes off a NSInputStream to compare
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Is there a more efficient way to get the first 4 bytes off a NSInputStream to compare


  • Subject: Re: Is there a more efficient way to get the first 4 bytes off a NSInputStream to compare
  • From: Michael Ash <email@hidden>
  • Date: Tue, 27 Jan 2009 17:52:43 -0500

On Tue, Jan 27, 2009 at 5:15 PM, William Jon Shipley
<email@hidden> wrote:
>> Will thanks for the heads up, for my purposes this time around, the
>> input stream will be coming in off the file system, but I did not want
>> to load the whole thing into an NSData object.
>
> Ah! Well, your approach will work, but if your file is less than 4GB I
> highly recommend something like:
>
>     NSData *fileData = [NSData dataWithContentsOfFile:path
> options:NSUncachedRead error:&error];
>
> This is NOT implemented by Apple in a naïve way - eg, it doesn't read the
> whole dang file and blat it into memory. Instead, it reads blocks on-demand,
> in a most efficient manner.

Actually it does, as can be trivially verified by sticking it in a
quickie test program, pointing it at a very large file, and watching
it grind away for several seconds while its RPRVT goes up and up.

Perhaps you meant NSMappedRead here?

And note that "less than 4GB" really means more like "less than 2-3GB"
due to address space fragmentation, and even then you can only have
ONE of the things in memory at a time if you do that, and aren't in
64-bit land. More realistically speaking, you should probably not use
NSData to read entire files (mapped or otherwise) once you can
reasonably expect those files to surpass 500MB or so, and even when
you're near the limit you need to apply a great deal of thought when
doing so to make sure that the user couldn't possibly, say, cause your
app to open several of them simultaneously.

If you are fortunate enough to be able to build 64-bit-only then these
problems largely go out the window, of course.

Mike
_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Is there a more efficient way to get the first 4 bytes off a NSInputStream to compare
      • From: Jean-Daniel Dupas <email@hidden>
References: 
 >Re: Is there a more efficient way to get the first 4 bytes off a NSInputStream to compare (From: William Jon Shipley <email@hidden>)

  • Prev by Date: Re: Is there a more efficient way to get the first 4 bytes off a NSInputStream to compare
  • Next by Date: Re: [Q] disposing of a stream object when NSStreamEventEndEncounterered is received?
  • Previous by thread: Re: Is there a more efficient way to get the first 4 bytes off a NSInputStream to compare
  • Next by thread: Re: Is there a more efficient way to get the first 4 bytes off a NSInputStream to compare
  • Index(es):
    • Date
    • Thread