在java.io.FileInputStream
中,有一种方法int read(Byte[] buffer,int offset,int numBytes)
;我们如何使用这个函数 - 这个方法和read(byte[] buffer)
之间有什么区别吗?
答案 0 :(得分:7)
正如Javadoc指出的那样(以及参数的名称表示),具有offset和numBytes的方法仅使用缓冲区的一部分来输出。
public int read(byte[] b,
int off,
int len)
throws IOException
Parameters:
b - the buffer into which the data is read.
off - the start offset of the data.
len - the maximum number of bytes read.
如果要重用已经包含不想要删除的数据的现有缓冲区,则可以使用此方法(当然,从numBytes
开始的offset
将被覆盖)
在Java中,几乎所有缓冲区上的操作都提供了这种接口。如果使用得当,您可以避免多次复制/缓冲数据。
答案 1 :(得分:1)
刚刚从javadoc获得了这个。
将此输入流中最多len个字节的数据读入一个字节数组。如果len不为零,则该方法将阻塞直到某些输入可用;否则,不读取任何字节,返回0。
参数:
返回: 读入缓冲区的总字节数,如果由于文件末尾已到达而没有其他数据,则为-1。
http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html#read(byte[],int,int)
答案 2 :(得分:1)
此功能对于将整个文件读入内存非常有用。见这个例子,
File = new File("/anywhere/anyfile");
InputStream is = new FileInputStream(file);
long fileSize = file.length();
byte[] bytes = new byte[(int)fileSize];
int offset = 0;
int count=0;
while (offset < fileSize) {
count=is.read(bytes, offset, fileSize-offset));
if (count >= 0)
offset += count;
else
throw new IOException("Can't read file "+file.getName());
}
is.close();
// Now bytes has all the complete file.
答案 3 :(得分:0)