Thanks for your review Stuart.
Comments below.

> On 6 Dec 2018, at 02:18, Stuart Marks <stuart.ma...@oracle.com> wrote:
> 
> Hi Vinnie,
> 
> Roger Riggs wrote:
>>> The 'forEachOrdered' should not be necessary and may raise questions about 
>>> why.
>>> if there's no good reason, use 'forEach’.
> 
> Using forEachOrdered() is necessary. The dumpAsStream() method produces a 
> stream; presumably it has a defined order that's the same as its input. The 
> semantics of Stream.forEach() are extremely relaxed, and in particular it's 
> not required to process stream elements in order, even if the stream is 
> ordered. (In practice this is noticeable if the stream is run in parallel.)
> 
> I'd use forEachOrdered() both in the examples and also where you use it in 
> implementations.

I’ve retained forEachOrdered() throughout.

> 
> The methods that return streams should specify the important characteristics. 
> Probably the ones most important one are that the returned stream is ordered 
> and sequential. For the overloads that take fixed-size input, the resulting 
> stream might also be SIZED.

I’ve updated the javadoc @return tag for the Stream-returning methods.
Let me know if you’d prefer the stream characteristics to also appear in the 
method’s first sentence.

> 
> I'm not convinced that the overloads that send output to an OutputStream pull 
> their weight. They basically wrap the OutputStream in a PrintStream, which 
> conveniently doesn't declare IOException, making it easy to use from a lambda 
> passed to forEachOrdered(). If an error writing the output occurs, this is 
> recorded by the PrintStream wrapper; however, the wrapper is then thrown 
> away, making it impossible for the caller to check its error status.

The intent is to support a trivial convenience method call that generates the 
well-known hexdump format.
Especially for users that are interested in the hexdump data rather than the 
low-level details of how to terminate a stream.
The dumpAsStream methods are available to support cases that differ from that 
format.

Have you a suggestion to improve the dump() methods, or you’d like to see them 
omitted?

> 
> The PrintStream wrapper also uses the platform default charset, and doesn't 
> provide any way for the caller to override the charset.

Is there a need for that? Originally the requirement was driven by the hexdump 
format which is ASCII-only.
Recently the class has been enhanced to also support the printable characters 
from ISO 8859-1.
A custom formatter be supplied to dumpAsStream() to cater for all other cases?

> 
> Instead, you can just provide the Stream-returning methods, and let the user 
> send the output to a PrintStream using forEachOrdered() as in your examples.
> 
> It might be nice to provide convenience APIs to send output elsewhere, but 
> the problem is that it seems difficult to do so without losing control over 
> things like error handling or charsets. In particular, since the hex 
> formatter is producing strings, it seems like there should be an option to 
> send the output to a Writer. Unfortunately it's difficult to do so from a 
> Stream, because all the Writer methods throw IOException. However, solving 
> this isn't hexdump's problem.

It’s a little more effort but those cases can always be handled by a custom 
formatter.


> 
> s'marks

Reply via email to