commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rob Spoor <apa...@icemanx.nl>
Subject Re: [IO] Missing Reader / Writer implementations
Date Thu, 01 Aug 2019 15:57:23 GMT
I guess that the full list is not necessary, but I've been working on a 
project where I could have used the following:

* TaggedReader: to distinguish between IOExceptions from reading and 
other IOExceptions.
* TeeReader: a piece of code needs a Reader but I also need the contents 
that have already been read. A TeeReader combined with a 
StringBuilderWriter would be perfect.
* AppendableWriter: most of the code works with the more generic 
Appendable, but it sometimes needs to delegate to a library that only 
works with Writer.

In addition, I think that the CloseShield classes are definitely a good 
addition, especially CloseShieldWriter. Like CloseShieldInputStream, 
it's great for supporting wrapping Writer implementations that need to 
be closed. These then need the Closed classes, to keep the 
implementation similar to those of ClosedInputStream and ClosedOutputStream.

So let's shorten the list to the following:
* CloseShieldReader: I've seen too many libraries that close Readers 
passed to them (even Jackson does this by default!).
* ClosedReader: needed by CloseShieldReader.
* TaggedReader: to support distinguishing between IOExceptions from 
reading and others.
* TeeReader: to support my read + copy to StringBuilder problem.
* AppendableWriter: to support my bridge problem.
* CloseShieldWriter: see ClosedShieldWriter
* ClosedWriter: needed by CloseShieldWriter.

Maybe we can add TaggedWriter and TeeWriter for completeness sake.


If nobody disagrees with these 7 or 9 classes (from the original list of 
22), I can start working on a pull request. I'll also include the 
IOUtils.writer method, using Objects.requireNonNull (I copied the 
explicit null check from IOUtils.buffer).


Rob


On 01/08/2019 14:10, Gary Gregory wrote:
> Hi Rob,
> 
> I imagine that the classes you mention might be missing based on the YAGNI
> principle. I offer that you consider real use cases before plunging into
> implementation. We do not want to bloat this component just for the sake of
> completeness.
> 
> Don't forget to get as close as possible to 100% code coverage with unit
> tests for new code in your PRs ;-)
> 
> Gary
> 
> On Thu, Aug 1, 2019 at 6:39 AM Rob Spoor <apache@icemanx.nl> wrote:
> 
>> Hi,
>>
>> I noticed that a lot of InputStream / OutputStream implementations do
>> not have a matching Reader / Writer implementation. Some would really be
>> useful.
>>
>> I've made an overview of classes that could be added:
>> * AutoCloseReader
>> * BrokenReader
>> * CloseShieldReader
>> * ClosedReader
>> * CountingReader
>> * DemuxReader
>> * InfiniteCircularReader
>> * ObservableReader
>> * TaggedReader
>> * TeeReader
>> * UnixLineEndingReader
>> * WindowsLineEndingReader
>>
>> * AppendableWriter
>> * BrokenWriter
>> * CloseShieldWriter
>> * ClosedWriter
>> * CountingWriter
>> * DeferredFileWriter
>> * DemuxWriter
>> * TaggedWriter
>> * TeeWriter
>> * ThresholdingWriter
>>
>>
>> I am willing to write the following (based on the InputStream
>> implementations), if needed. I have signed the ICLA, have a JIRA account
>> (username Spoor) and a GitHub account (username robtimus):
>>
>> * AutoCloseReader
>> * BrokenReader
>> * CloseShieldReader
>> * ClosedReader
>> * CountingReader
>> * TaggedReader
>> * TeeReader
>>
>> * AppendableWriter
>> * BrokenWriter
>> * CloseShieldWriter
>> * ClosedWriter
>> * CountingWriter
>> * TaggedWriter
>> * TeeWriter
>>
>>
>> In addition, if AppendableWriter is added, I think there should be a
>> method added to IOUtils, to prevent having to create an AppendableWriter
>> for an object that's already a Writer:
>>
>>       public static Writer writer(final Appendable appendable) {
>>           if (appendable == null) {
>>               throw new NullPointerException();
>>           }
>>           return appendable instanceof Writer ?
>>                   (Writer) appendable : new AppendableWriter(appendable);
>>       }
>>
>>
>> Kind regards,
>>
>> Rob
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>> For additional commands, e-mail: dev-help@commons.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message