在java.io.FileInputStream
,有一种方法int read(Byte[] buffer,int offset,int numBytes)
;我们如何使用这个功能 - 这个方法和read(byte[] buffer)
有什么不同?使用Java的FileInputStream
回答
正如Javadoc中指出(和参数的名称指示),失调和的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.
你可以使用这种方法,如果你想重新使用一个已经有数据的现有缓冲区,你不想破坏(当然,从offset
开始的numBytes
将被覆盖)。
在Java中,缓冲区中的几乎所有操作都提供这种类型的接口。正确使用,您可以避免多次复制/缓冲数据。
如果您使用缓冲区同时缓冲和处理来自流的数据,那么这非常有趣。例如,某些媒体格式的解码器可能会将数据从流中读取到缓冲区中,而另一个线程从此缓冲区中获取值以处理它们。由于缓冲区之前可能会填充某些值,因此您需要在给定偏移量处开始重新填充(因此使用第二个参数)。如果你完全填充缓冲区,你将从头开始,但只使用已由另一个线程处理的空间,并使用len-param来实现这一点。 – Mnementh 2009-08-04 10:55:59
刚刚从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)
这个功能是非常有用的阅读整个文件到内存中。看到这个例子,
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.
- 1. 使用URL的Java fileinputstream
- 2. 的Java的FileInputStream使用,如果
- 3. 的Java:单的FileInputStream使用多个DataInputStreams
- 4. FileInputStream错误Java
- 5. Android:FileNotFoundException使用FileInputStream
- 6. 使用FileInputStream时发生Java ClassCastException
- 7. 在Java中如何使用FileInputStream
- 8. 使用fileinputstream在java中读取文件
- 9. 使用FileInputStream时发生Java UnsupportedAudioFileException
- 10. 使用FileInputStream读取多个对象 - Java
- 11. 的Java NIO和的FileInputStream
- 12. FileNotFoundException当使用FileInputStream
- 13. Web服务中的Java FileInputStream
- 14. 关闭一个Java的FileInputStream
- 15. Java中的FileInputStream和FileOutputStream
- 16. java FileInputStream和FileOutputStream的错误
- 17. 的FileInputStream使用包路径
- 18. java FileInputStream找不到文件
- 19. Java fileinputstream阅读没有.read()
- 20. 当我使用FileInputStream时FileNotFoundException
- 21. 增加由Java FileInputStream使用的内部缓冲区大小
- 22. 使用ByteArrayInputStream进行的FileInputStream的
- 23. Java中的RandomAccessFile vs扫描器vs FileInputStream
- 24. Java - 是否需要关闭“新的FileInputStream”?
- 25. 获取FileInputStream使用的文件
- 26. 使用的FileInputStream得到加密文件
- 27. 如何修改其使用的FileInputStream
- 28. Java:使用FileInputStream逐页阅读utf-8文件
- 29. FileInputStream没有使用Java创建实际文件
- 30. FileInputStream上的NullPointerExeption
要回答这个问题只需要一些批判性思维。考虑到你知道两个函数之间的方法参数的区别,你认为*的区别是什么?将您的猜测与文档进行比较。 – 2009-08-04 10:48:49