[Haskell] reading binary files

minh thu noteed at gmail.com
Fri Apr 7 17:39:28 EDT 2006


thanks a lot Bulat !

i ve seen the lib use System.Stream which i don't know...
the fact you can discribe a layout then read a file according to the
layout is just a feature i thought about. i'll definitely learn your
library.

minh thu

2006/4/6, Bulat Ziganshin <bulat.ziganshin at gmail.com>:
> Hello minh,
>
> Thursday, April 6, 2006, 12:41:32 PM, you wrote:
>
> > the code you give in the mail is +/- what i thought about ... is-it
> > the fastest way ?
>
> if you will say about your task and speed requirements, i will say how
> you can do it. the fastest way is to use asm :)
>
> > thank you also for your lib, i will read it later in the day.
>
> > when i said "would have to be the same" in previous mail, it's because
> > i like to see haskell as a really high-level abstraction where you
> > just say what you want, but not in which way to do it. in the examples
> > (mines or yours), the programmer has a lot of choices ...
>
> it was on advertising :)  in Real World (tm) the things are more
> complex ;)  on the other side, you can write something like this
> (using my library):
>
> data TiffHeader = Tiff { id : Word8,
>                         height : Word16,
>                         width : Word16,
>                         ....
>                       }
>
> main = do h <- openBinaryFD "filename" ReadMode
>          header <- get h
>          print (height header, width header)
>
> and got what you want. here, all fields will be read as big-endian, to
> read them as little-endian you should use:
>
> main = do h <- openBinaryFD "filename" ReadMode >>= openByteAlignedLE
>
>
> > another problem is that you have to allocate a buffer before reading
> > the file, but (i m not a os expert) i think there is already some kind
> > of plumbing (maybe another buffer) to read file. so maybe that in all
> > cases, we're losing efficiency when reading a file ?
> > also, if our buffer allocation is mandatory, the compiler could put
> > the right code for us (i.e. choose the best buffer length).
>
> with my lib, you can either read data directly from file (through
> implicit 512-byte buffer) or read whole file into the automatically
> allocated buffer with `readFromFile`. what is better - depends on what
> you plan to do with rest of file
>
> >>          -- Create new MemBuf filled with data from file
> >>          h <- readFromFile "test"
>
>
>
> --
> Best regards,
>  Bulat                            mailto:Bulat.Ziganshin at gmail.com
>
>


More information about the Haskell mailing list