目前,我的代码可以正常工作,但是我应该将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
。