Ale*_*rev 13 java io inputstream
通过哪种方式返回0(读取的字节数)InputStream.read?如何处理这种情况?
更新:我的意思是read(byte[] b)或read(byte[] b, int off, int len)返回读取字节数的方法.
Joa*_*uer 17
InputStream可以0从调用返回的唯一情况read(byte[])是byte[]传入的长度为0时:
byte[] buf = new byte[0];
int read = in.read(buf); // read will contain 0
Run Code Online (Sandbox Code Playgroud)
正如JavaDoc的这一部分所指定的:
如果b的长度为零,则不读取任何字节,返回0
我的猜测:你曾经available()看过缓冲区应该有多大并且它返回了0.请注意,这是误用available().JavaDoc明确指出:
使用此方法的返回值来分配用于保存此流中所有数据的缓冲区绝对不正确.
小智 10
看一下javax.sound.AudioInputStream #read(byte [] b,int off,int len)的实现... yuck.它们完全违反了标准的java.io.InputStream语义,如果请求少于一整帧数据,则返回读取大小为0.
不幸的是; 当len> 0时,常见的建议(和api规范)应该排除必须处理零的返回,但即使对于JDK提供的类,你也不能普遍依赖于任意类型的InputStreams.
再次,哎呀.
| 归档时间: |
|
| 查看次数: |
9922 次 |
| 最近记录: |