2

java.io.FileInputStream,有方法int read(Byte[] buffer,int offset,int numBytes);我们如何使用这个功能 - 这个方法和 有什么区别read(byte[] buffer)吗?

4

4 回答 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

http://java.sun.com/docs/books/tutorial/essential/io/index.html

于 2009-08-04T10:45:22.857 回答