是否RandomAccessFile.read()从本地文件保证的字节确切数目将被读取?(Does

2019-10-22 03:14发布

目前,我的代码工作正常,但我应该取代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()不能保证所需的字节数将被读取。 这是正确的吗?

Answer 1:

read方法不能保证读取所有请求的字节(即使他们在文件中存在)。 实际的行为将是依赖于底层的操作系统和文件系统上。 例如,当通过NFS的支持下,你可能会更可能无法获得全部在一个单一的呼叫请求的字节。

如果你想保证获得所有在一个单一的呼叫请求的字节,则必须使用readFully



Answer 2:

因为它是在对文档的RandomAccessFile#读取(字节[] b)中

返回:字节总数读入缓冲区,或-1,如果没有更多的数据,因为该文件的结尾已经达到。



文章来源: Does RandomAccessFile.read() from local file guarantee that exact number of bytes will be read?