使用Java的FileInputStream

时间:2009-08-04 10:43:26

标签: java io stream fileinputstream

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

4 个答案:

答案 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。

参数:

  • b - 读取数据的缓冲区。
  • off - 目标数组b
  • 中的起始偏移量
  • len - 读取的最大字节数。

返回: 读入缓冲区的总字节数,如果由于文件末尾已到达而没有其他数据,则为-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)