本地文件中的 RandomAccessFile.read() 是否保证将读取确切的字节数?
Does RandomAccessFile.read() from local file guarantee that exact number of bytes will be read?
目前我的代码工作正常,但我是否应该将 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()
都会 return 指定的字节数。 readFully
在从网络流中读取时有用,当 read()
不能保证读取所需的字节数时。正确吗?
因为它在文档中
RandomAccessFile#read(byte[] b)
Returns:
the total number of bytes read into the buffer, or -1 if there is no more data because the end of this file has been reached.
read
方法不保证读取所有请求的字节(即使它们存在于文件中)。实际行为将取决于底层 OS 和文件系统。例如,当由 NFS 支持时,您更有可能无法在一次调用中获得所有请求的字节。
如果要保证在一次调用中获取所有请求的字节,则必须使用readFully
。
目前我的代码工作正常,但我是否应该将 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()
都会 return 指定的字节数。 readFully
在从网络流中读取时有用,当 read()
不能保证读取所需的字节数时。正确吗?
因为它在文档中 RandomAccessFile#read(byte[] b)
Returns: the total number of bytes read into the buffer, or -1 if there is no more data because the end of this file has been reached.
read
方法不保证读取所有请求的字节(即使它们存在于文件中)。实际行为将取决于底层 OS 和文件系统。例如,当由 NFS 支持时,您更有可能无法在一次调用中获得所有请求的字节。
如果要保证在一次调用中获取所有请求的字节,则必须使用readFully
。