来自本地文件的RandomAccessFile.read()是否保证将读取确切的字节数?

时间:2015-03-03 12:21:27

标签: java buffer randomaccessfile

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

2 个答案:

答案 0 :(得分:0)

正如文档中所述 RandomAccessFile#read(byte[] b)

  

返回:       读入缓冲区的总字节数,如果由于已到达此文件末尾而没有其他数据,则为-1。

答案 1 :(得分:0)

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

如果您想保证在一次通话中获得所有请求的字节,则必须使用readFully