Kamaelia docs : Kamaelia.File.ReadFileAdaptor.ReadFileAdaptor


For examples and more explanations, see the module level docs.

class ReadFileAdaptor(Axon.Component.component)

An instance of this class is a read file adaptor component. It's constructor arguments are all optional. If no arguments are provided, then the default is to read from stdin, one line at a time, as fast as possible. Note that this will cause the outbox to fill at the same rate as stdin can provide data. (Be wary of memory constraints this will cause!)

Arguments & meaning:
  • filename="filename" - the name of the file to read. If you want stdin, do not provide a filename! If you want the output from a command, also leave this blank...

  • command="command" - the name of the command you want the output from. Leave the filename blank if you use this!

  • readmode - possible values:
    • "bitrate" - read at a specified bitrate.
    • "line" - read on a line by line basis
    • "block" - read the file on a block by block basis.
  • If bitrate mode is set, you should set bitrate= to your desired bitrate (unless you want 64Kbit/s), and chunkrate= to your desired chunkrate (unless you want 24 fps). You are expected to be able to handle the bit rate you request!

  • If block mode is set then you should set readsize (size of the block in bytes), and steptime (how often you want bytes). If steptime is set to zero, you will read blocks at the speed the source device can provide them. (be wary of memory constraints)

After setting the ReadFileAdaptor in motion, you can then hook it into your linkages like any other component.


  • control : NOT USED
  • inbox : NOT USED


  • outbox : When data is read, it is made available here.
  • signal : Shutdown signalling

Methods defined here


You should be using the inbox/outbox interface, not these methods (except construction). This documentation is designed as a roadmap as to their functionalilty for maintainers and new component developers.


#!!!! Called at component exit... Closes the file handle


This method attempts to read data of a specific block size from the file handle. If null, the file is EOF. This method is never called directly. If the readmode is block or bitrate, then the attribute self.getData is set to this function, and then this function is called using self.getData(). The reason for this indirection is to make it so that the check for which readmode we are in is done once, and once only


This method attempts to read a line of data from the file handle. If null, the file is EOF. As with getDataByteLen, this method is never called directly. If the readmode is readline (or ""), then the attribute self.getData is set to this function, and then this function is called using self.getData(). Same reason for indirection as above.


Opens the appropriate file handle


We check whether it's time to perform a new read, if it is, we read some data. If we get some data, we put it in out outbox "outbox", and to stdout (if debugging). If we had an error state (eg EOF), we return 0, stopping this component, otherwise we return 1 to live for another line/block.


Got a problem with the documentation? Something unclear that could be clearer? Want to help improve it? Constructive criticism is very welcome - especially if you can suggest a better rewording!

Please leave you feedback here in reply to the documentation thread in the Kamaelia blog.

-- Automatic documentation generator, 05 Jun 2009 at 03:01:38 UTC/GMT

Kamaelia is an open source project originated from and guided by BBC Research. For more information browse the site or get in contact.

This is an ongoing community based development site. As a result the contents of this page is the opinions of the contributors of the pages involved not the organisations involved. Specificially, this page may contain personal views which are not the views of the BBC. (the site is powered by a wiki engine)

(C) Copyright 2008 Kamaelia Contributors, including the British Broadcasting Corporation, All Rights Reserved.

This web site is powered by the same code created for the bicker manor project. For more details, contact Michael Sparks at BBC Research directly (cf contact)