Why doesn't the Javadoc for java.util.Scanner describe under what conditions it blocks? -



Why doesn't the Javadoc for java.util.Scanner describe under what conditions it blocks? -

the javadoc java.util.scanner notes that:

"both hasnext , next methods may block waiting farther input. whether hasnext method blocks has no connection whether or not associated next method block.".

in descriptions of various has* , next* methods, notes "may block while waiting input scan". page mention under conditions these methods may block, in spite of knowledge beingness prerequisite using them.

my question hence, why doesn't javadoc describe under conditions scanner's methods may block? there legitimate reason omitting information, or case of poor documentation?

now you've mentioned it, pretty vague. although, explaining mean digging implementation details.

the scanner relies on underlying stream. scanner#next() throw nosuchelementexception whenever underlying stream's read() method returns -1 upon reading:

(implementation summary)

public void next() { if(needinput) readinput(); else throwexception(); } void readinput() { int n = 0; seek { n = underlyingstream.read(buf); } grab (ioexception ioe) { lastexception = ioe; n = -1; //error happened } if (n == -1) underlyingstreamclosed = true; } void throwexception() { if (underlyingstreamclosed) throw new nosuchelementexception(); else throw new inputmismatchexception(); }

for example, lets @ inputstream without scanner. inputstream#read() blocks when called, until info comes in. using inputstream such system.in cause scanner block, since inputstream#read() blocks (the implementation written in native code, if you're really interested, can find file it's located in , @ implmenetation yourself). applies stream extends inputstream, yet doesn't override read() alter it's implementation. example, objectoutputstream, dataoutputstream

fileinputstream, however, override read() (also native implmenetation). calling fileinputstream#read() homecoming -1 when effort read, yet there nil there (although documentation method may block, have yet come across case). purely due implementation of fileinputstream#read(), shouldn't worry about.

long story short: relies on underlying stream. become familiar streams, , you'll set. way see it, if you're worried stream blocks or not, @ implementations (i find when subclasses don't override read() method, tend block), test them out yourself, or online. documentation should tell you, although said, have yet come across moment when fileinputstream#read() has blocked (could help me reproduce situation, if documentation says?)

java java.util.scanner javadoc

Comments

Popular posts from this blog

formatting - SAS SQL Datepart function returning odd values -

c++ - Apple Mach-O Linker Error(Duplicate Symbols For Architecture armv7) -

php - Yii 2: Unable to find a class into the extension 'yii2-admin' -