Hello,

Streamable codecs make a lot of sense for some codecs (but perhaps not for
the language codecs). Thanks for bringing the topic up. I took a very quick
look at the code you refer to and it seems to be a separate framework from
what we have in [codec] today (I could be wrong of course), especially the
whole Producer/Consumer business.

A simple example I can think of that could drive an implementation could be:

InputStream inputStream = ... new File(...);
DigiestUtil.md5Hex(inputStream);

It would be interesting to see how Ant implements MD5 and SHA.

This probably means that Encoder.encode(Object) should also handle
I/O/Streams and Reader/Writer...

Gary

> -----Original Message-----
> From: Brett Henderson [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, January 06, 2004 18:29
> To: 'Jakarta Commons Developers List'
> Subject: RE: [codec] Streamable Codec Framework
> 
> There seemed to be definite interest in streamable
> codecs but the list has gone fairly quiet.
> 
> I am interested in participating in work of this
> kind but I'm not sure how to proceed.
> 
> I don't think this deserves to be a standalone
> project as it seems to fit fairly well into the
> scope of the current codec package and I don't
> want to step on any toes with respect to the
> existing codec project.
> 
> I believe Gary Gregory and Tim O'Brien are the two
> primary codec committers.  Gary and Tim, your thoughts
> would be most appreciated.
> 
> I'm providing the code mentioned in the below
> message as an example because I believe it is more
> effective to discuss working code than talk about
> abstract ideas.
> 
> > -----Original Message-----
> > From: Brett Henderson [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, 13 November 2003 10:33 AM
> > To: 'Jakarta Commons Developers List'
> > Subject: RE: [codec] Streamable Codec Framework
> >
> >
> > I made some changes to the code I supplied previously, it can
> > be found at the following URL.
> >
> > http://www32.brinkster.com/bretthenderson/BHCodec-0.5.zip
> >
> > The main differences relate to the codec interfaces and
> > support for data types other than "byte", the encoding
> > algorithms are largely unchanged.
> >
> > A quick summary of the framework is as follows:
> >
> > Framework is based around consumers and producers, consumers
> > accept incoming data and producers produce outgoing data. A
> > consumer implements the Consumer interface and a producer
> > implements the Producer interface.
> >
> > Specialisations of these interfaces are used for each type
> > of data to be converted.  For example there are currently
> > ByteConsumer, ByteProducer, CharConsumer and CharProducer interfaces.
> >
> > The engine package contains classes (and interfaces) that
> > are both consumers and producers (ie. accept incoming data
> > and produce result data).  For example there is a ByteEngine
> > interface that implements ByteConsumer and ByteConsumer
> > interfaces and is in turn implemented by the Base64Encode
> > concrete class.
> >
> > Engines may consume one kind of data and produce another,
> > the CharByteEngine interface defines an engine that
> > consumes characters and produces bytes.  This is implemented
> > by the CharSetEncode class (untested).
> >
> > The consumer package contains classes that consume data
> > and perform an action on the data that doesn't allow it to
> > be accessed via producer functionality.  For example, the
> > BufferByteConsumer class acts as a receiving buffer for
> > encoding results, the OutputStreamConsumer writes all data to
> > an OutputStream.
> >
> > The producer package contains classes that produce data
> > for the framework but don't accept data via consumer
> > functionality.  For example, the OutputStreamProducer is an
> > OutputStream that "produces" all data passed to it.
> >
> > The io package contains classes that fit into the java.io
> > functionality that are neither consumers or producers in the
> > framework sense.  For example, the CodecOutputStream is a
> > FilterOutputStream that uses an internal ByteEngine to
> > perform a transformation on the data passing through it.
> >
> > JUnit tests exist for most classes in the framework.
> > All testing is performed using JUnit.  If there is no unit
> > test for a class, it can be considered untested.
> >
> > The framework is now generic enough to handle data of any
> > type and allow classes to be defined which can accept
> > any kind of data and/or produce any kind of data.  All
> > data can be processed in a "streamy" fashion.  For example,
> > encoding engines implementing the ByteEngine interface can be
> > plugged into CodecOutputStream or CodecInputStream and used
> > for stream functionality without directly supporting java.io streams.
> >
> > Using the CharSetEncode and (currently non-existent)
> > CharSetDecode, it should be possible to encode character data
> > to base64 then write result to a Writer.  This should go part
> > way towards helping Konstantin with his XML conversions.
> >
> > Sorry about the brain dump but there is a fair bit
> > contained in the zip file and I thought some explanation
> > would be useful.
> >
> > Any feedback on the above is highly welcome.  I don't
> > plan on making too many more changes unless it is
> > deemed useful.
> >
> > Brett
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to