java.io.Inputs and java.io.Ouputs (original) (raw)

Alan Bateman Alan.Bateman at Sun.COM
Sun Nov 16 09:40:09 PST 2008


Rémi Forax wrote:

Hi alan, hi all, Wow, I think its a very good idea to introduce static methods for reading/writing lines. Thanks for noticing. I've been meaning to some utility classes for this for some time as it's an area that many developers get annoyed with.

- Providing a closeUnchecked is a good idea but i don't see why readAllBytes*() need use it. It doesn't matter too much, but I agree that it would be better to invoke close directly.

- characters based method readAllLines/writeLines() should have a variation that takes a Charset as parameter. It will avoid to use Charset.defaultCharset().name() in some writeLines(). Btw, readAllLines and writeLines is not a coherent naming scheme, in my opinion, writeLines should be rewritten writeAllLines. There is a version of each method, one that takes the charset (as a String), and the other that uses the default charset. I don't have any objection to a third variant that specifies the charset as a Charset (the other obvious one is a variant that specifies the CharsetDecoder but I wouldn't expect the average developer to use it).

- readAllLines should be lazy, i.e. returns an Iterable, its iterator should close the stream when hasNext() return false. I think Python already do something like that. I don't think this is feasible here. There is no guarantee that the user will iterate to the end (due to an exception for example). Also, there is no guarantee that the source will remain accessible. For example, somebody might want to read all the lines from a text file and delete the file immediately. Also, if the InputStream is to a network resource (a http connection for example) then I/O would need to be exposed by the iterator.

- writeLines should take an Iterable<? extends CharSequence> instead of a List, implwriteLines() should be re-written : for (CharSequence line: lines) { writer.write(line.toString()); writer.newLine(); } Making it more general is a good idea.

A more general question, how about word based read methods ? I'm not sure about this because it is locale sensitive. An alternative might be some improvements to the java.text package that could be used in conjunction with the java.io package. This is an area we would need to discuss with the i18n group.

I am a commiter on another OpenJDK workspace, so if you want I think I am able to create a patch, ask for reviews and if it's ok, push the patch. Got for it!

-Alan.



More information about the nio-dev mailing list