This is a collection of IO specific classes, and file system related classes.
For the rest of Metanotion Software's services and products, please visit our homepage.
The main purpose of this library is to provide a better set of interfaces for describing file systems than the java.io.File and friends. Starting with an interface for file systems net.metanotion.io.FileSystem, this provides a set of interfaces describing file system operations. Importantly, all requests for streams and file must go through the file system interface, this providing opportunities to implement classes like: ChRootFileSystem that changes the root of the file system to a directory passed to the constructor, and prevents any user of the class from accessing or seeing file system structure above that root.
This structure also allows user classes to transparently switch between database backed, distributed, or advance data stores without changes, unlike attempting to extend java.io.File and java.io.File*Stream. Note, that no drivers for these advanced stores exist, but you know, that's why this is open source.
Also, if you're looking, the normal local filesystem can be accessed with net.metanotion.io.JavaFileSystem.
The BlockIO interface defines a general contract for a device that (optionally) supports transactions to allocate, read/write, and free "blocks" of data according to some key.
The AppendBlockIO class uses a single random access file to handle arbitrary sized byte array blocks. It uses integer keys as well. It accomplishes support for transactions by using file append operations. To reduce the file size, a compaction operation is needed, but this must be initiated by the user. The last block represents a "state of the world" when the file was last closed(or checkpointed/flushed), however, it is not authoritative as the state can be determined by "replaying" the file. For more information see the AppendBlockIO datastore package summary.
Last Update: July 6th, 2008.