Lew wrote:
Tom Hawtin wrote:
FileReader fileReader = new FileReader(file);
CharBuffer charBuffer = CharBuffer.allocate((int)file.length());
This could allocate a buffer three times to large,
Jeff Higgins wrote:
Going over Javadocs... could you elaborate?
Because Strings and Chars are encoded, as are files. ...
OK, chars are not bytes. (int)file.length() not a good choice here.
or way too small for a huge file.
if file.length() > Integer.MAX_VALUE file == huge file
fileReader.read(charBuffer);
This does not necessarily read all that could be read. Should be in a
loop.
Again, I'm sorry but I haven't been able to figure out what might
cause read(charBuffer) to not read all that could be read?
Is this a sufficent loop?
while(fileReader.ready()){fileReader.read(charBuffer);}
No. You'll have to fill the buffer, flip() it, read it to store or
processe the data, then rewind() and repeat. I haven't played with
java.nio much but if I erred here someone should step up and correct me
pretty quickly.
Going back over Javadocs -- silly condition.
<http://java.sun.com/developer/technicalArticles/releases/nio/index.html>
<http://www.javaworld.com/javaworld/jw-09-2001/jw-0907-merlin.html>
Thanks for the pointers. I read the javaworld article, very interesting.
GIYF.
GIGR The Google isa great resource.
Back to the OP which caught my eye, and to Tom's response,
"One byte at a time. Not going to be fast."
OK, scratch the CharBuffer solution. Now my latest solution:
[snippet]
startBlock = System.currentTimeMillis();
for(int i = 0; i < 10; i++)
{
File file = new File("file.9612544.bytes");
byte[] a = new byte[(int)file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(a);
is therefore guaranteed not to work every time. See the docs.