目前,我的代码可以正常工作,但是我应该将raf.read()替换为raf.readFully()以确保将读取所有字节吗?

            raf = new RandomAccessFile(doc.getFilePath()+"/"+doc.getName(),"r");
            raf.seek((partNumber-1)*partitionSize);
            byte[] buf = new byte[partitionSize];
            int bytesRead = raf.read(buf); //ensure myself by readFully or not?
            System.out.println("expected="+partitionSize+" readed="+bytesRead);


我的建议如下-从本地资源(如文件)中读取一个read()调用无论如何都会返回指定的字节数。当从网络流中读取时,当readFully不保证将读取所需的字节数时,read()很有用。这是对的吗?

最佳答案

read方法不能保证读取所有请求的字节(即使它们存在于文件中)。实际行为将取决于基础操作系统和文件系统。例如,当由NFS支持时,您更有可能在单个调用中无法获得所有请求的字节。

如果要保证在单个调用中获得所有请求的字节,则必须使用readFully

09-11 20:52
查看更多