目前我的代码工作正常,但是我应该将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()
不能保证读取所需的字节数。这是对的吗?
答案 0 :(得分:0)
正如文档中所述 RandomAccessFile#read(byte[] b)
返回: 读入缓冲区的总字节数,如果由于已到达此文件末尾而没有其他数据,则为-1。
答案 1 :(得分:0)
read
方法不保证读取所有请求的字节(即使它们存在于文件中)。实际行为将取决于底层操作系统和文件系统。例如,当由NFS支持时,您可能更不可能在一次调用中获得所有请求的字节。
如果您想保证在一次通话中获得所有请求的字节,则必须使用readFully
。