听说用这个来从文件里读取字节数组的时候,可能实际读到的值比指定的值要少。
比如
        long length = file.length(); 
        byte[] bytes = new byte[(int)length]; 
     
        int numRead = is.read(bytes, 0, bytes.length);

就是说这个得到的numRead会有可能比bytes.length小。
请问这种结果是会在怎样的状况下发生?我试了几次没试验出来。

解决方案 »

  1.   

    byte[] bytes = new byte[(int)length];  你这个数组都已经是文件的长度了。然后读取肯定等于返回的长度啦。一般这个byte[]bytes=new byte[1024]等固定字段来读取的
      

  2.   

    可以参考一下read和write系统调用的情况嘛,一样的道理,以下是读取到的字节数比指定的要少的情况:
    1.读时遇到EOF:假如你想从一个只有20个字节大小的文件里一下读出50个字节,肯定不会返回50个给你
    2.从终端读文本行:如果打开的文件是和终端相关的,那么每个read函数将一次传送一个文本行,返回的不足值等于文本行的大小
    3.读和写网络socket:内部缓冲约束和较长的网络延迟可能回导致read返回不足值.除了EOF,读磁盘文件将不会出现你所说的小于情况