中java.io.FileInputStream
,有方法int read(Byte[] buffer,int offset,int numBytes)
;我们如何使用这个功能 - 这个方法和 有什么区别read(byte[] buffer)
吗?
问问题
8268 次
4 回答
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 中,几乎所有对缓冲区的操作都提供了这种接口。使用得当,您可以避免复制/缓冲数据超过必要的次数。
于 2009-08-04T10:46:38.020 回答
1
刚从javadoc得到这个。
从此输入流中读取最多 len 个字节的数据到一个字节数组中。如果 len 不为零,则该方法会阻塞,直到某些输入可用;否则,不读取任何字节并返回 0。
参数:
- b - 读取数据的缓冲区。
- off - 目标数组 b 中的起始偏移量
- len - 读取的最大字节数。
返回: 读入缓冲区的总字节数,如果由于到达文件末尾而没有更多数据,则返回 -1。
http://java.sun.com/javase/6/docs/api/java/io/FileInputStream.html#read(byte[] , int, int)
于 2009-08-04T10:47:20.107 回答
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.
于 2009-08-04T12:42:38.360 回答
0
于 2009-08-04T10:45:22.857 回答