Java中的FileInputStream和BufferedInputStream有什么区别?

Roh*_*hit 7 java

Java中的FileInputStream和BufferedInputStream有什么区别?

Ste*_*n C 17

主要差异:

  • BufferedInputStream是缓冲的,但FileInputStream不是.

  • A BufferedInputStream从另一个读取InputStream,但从FileInputStream文件读取1.

在实践中,这意味着每次调用FileInputStream.read()将执行系统调用(昂贵的)......而大多数调用BufferedInputStream.read()将从缓存返回数据.简而言之,如果您正在进行"小"读取,那么将一个BufferedInputStream放入流堆栈将提高性能.

  • 对于大多数目的/用例,这都是相关的.

  • 还有一些其他的东西(比如标记/重置/跳过),但这些都是专家......

  • 有关更多详细信息,请阅读javadocs ...和源代码.


1 - 或者更准确地说,来自某个对象1)在操作系统的"文件系统"命名空间中具有名称,以及2)操作系统允许您作为字节序列读取.这可能包括设备,命名管道以及可能不被视为"文件"的各种其他事物.值得注意的是,有些东西绝对不能用a来读FileInputStream.


Raj*_*ora 7

你必须谷歌搜索或阅读Javadocs

public class FileInputStream
extends InputStream
Run Code Online (Sandbox Code Playgroud)

FileInputStream 从文件系统中的文件中获取输入字节。哪些文件可用取决于主机环境。

FileInputStream 用于读取原始字节流,例如图像数据。要读取字符流,请考虑使用 FileReader。

有关更多详细信息:https : //docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html

public class BufferedInputStream
extends FilterInputStream
Run Code Online (Sandbox Code Playgroud)

BufferedInputStream 向另一个输入流添加功能,即缓冲输入和支持标记和重置方法的能力。创建 BufferedInputStream 时,会创建一个内部缓冲区数组。当读取或跳过流中的字节时,内部缓冲区会根据需要从包含的输入流中重新填充,一次很多字节。标记操作会记住输入流中的一个点,重置操作会导致在从包含的输入流中获取新字节之前重新读取自最近的标记操作以来读取的所有字节。

有关更多详细信息,请访问 https://docs.oracle.com/javase/7/docs/api/java/io/BufferedInputStream.html