当前位置: 首页 > 知识库问答 >
问题:

FileInputStream和BufferedInputStream在Java中的区别是什么?[关闭]

周弘毅
2023-03-14

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

共有3个答案

常翰
2023-03-14
1,2c1,2
< public class FileInputStream
< extends InputStream
---
> public class BufferedInputStream
> extends FilterInputStream
4,8c4,11
< A FileInputStream obtains input bytes from a file in a file system. What files
< are available depends on the host environment.
<
< FileInputStream is meant for reading streams of raw bytes such as image data.
< For reading streams of characters, consider using FileReader.
---
> A BufferedInputStream adds functionality to another input stream-namely, the
> ability to buffer the input and to support the mark and reset methods. When the
> BufferedInputStream is created, an internal buffer array is created. As bytes
> from the stream are read or skipped, the internal buffer is refilled as
> necessary from the contained input stream, many bytes at a time. The mark
> operation remembers a point in the input stream and the reset operation causes
> all the bytes read since the most recent mark operation to be reread before new
> bytes are taken from the contained input stream.
袁泰平
2023-03-14

你必须google或阅读Javadocs,

public class FileInputStream
extends InputStream

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

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

更多详情:https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html.

public class BufferedInputStream
extends FilterInputStream

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

欲知详情https://docs.oracle.com/javase/7/docs/api/java/io/BufferedInputStream.html.

何涵畅
2023-03-14

主要区别:

>

BufferedInputStream从另一个InputStream读取,而FileInputStream从文件1读取。

实际上,这意味着每次调用FileInputStream.read()都会执行syscall(昂贵的)...而大多数调用BufferedInputStream.read()都会从缓冲区返回数据。简而言之,如果您正在进行“小”读取,将一个BufferedInputStream放入流堆栈将提高性能。

>

  • 对于大多数目的/用例,这是所有相关的。

    还有一些其他的事情(如标记/重置/跳过),但这些都是相当专业的。。。

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

    1-或者更准确地说,来自某个对象,该对象1)在操作系统的“文件系统”命名空间中具有名称,2)操作系统允许您以字节序列的形式读取。这可能包括设备、命名管道和其他可能不被认为是“文件”的其他东西。还值得注意的是,有些东西使用FileInputStream绝对无法读取

  •  类似资料:
    • 问题内容: 我试图将文件加载到Web应用程序中,FileNotFound但使用时出现异常FileInputStream。但是,使用相同的路径时,我能够加载文件getResourceAsStream()。两种方法有什么区别,为什么一种方法有效而另一种无效? 问题答案: 在和配偶的行为在本地磁盘文件系统上。问题的根本原因是其中的相对路径取决于当前工作目录。即启动JVM(在你的情况下为:Web服务器的目

    • 问题内容: 和 Java 的区别? 问题答案: 如果问题是:“这些类之间的区别是什么”,这里是一个摘要,但请阅读javadoc以获得更多信息: inputStream是从流(网络或文件)读取字节的基类。它提供了从流中读取字节并检测流结束的功能。 DataInputStream是一种InputStream,可以直接将数据作为原始数据类型读取。 BufferedInputStream是一种inputS

    • 关于IO,我有两个问题。 A.在一个教程和一些StackOverflow答案中,他们声称没有被修复。是真的吗? 以下代码使用将数据读入字节数组(1024字节) 从API,有一行: 公共整数读取(字节b[])引发IOException @参数b:将数据读入的缓冲区 B.如果它们都是缓冲的,它们都将数据放入缓冲区,并从缓冲区中获取数据,那么使BufferedInputStream比FileInputS

    • 对于基本类型,==比较的是值; 对于引用类型,==比较的是地址; equals不能用于基本类型的比较; 如果没有重写equals,equals就相当于==; 如果重写了equals方法,equals比较的是对象的内容;

    • 问题内容: 我在看一些模拟的OCJP问题。我遇到了一个非常令人困惑的语法。这里是: 为什么输出在和之间变化? 问题答案: 问题只是和您玩弄混乱的空格。 是通常的(不等于)比较。 另一方面: 最好写成如下形式: 因此,这是两个运算符。 首先反转。 然后将其分配回。 赋值运算符返回分配的值。因此,计算结果为true-这就是您要打印的内容。

    • 问题内容: 我只是想知道为什么我们通常在两个布尔之间使用逻辑OR 而不是按位OR ,尽管它们都运行良好。 我的意思是,请看以下内容: 我们可以代替使用吗?与和相同。 问题答案: 如果您使用和形式,而不是这些运算符的和形式,则Java不会费心地单独评估右手操作数。 这是您是否希望缩短评估时间的问题-在 大多数情况 下都是如此。 说明短路好处的一个好方法是考虑以下示例。 正如Jeremy和Peter提